Разбор конкретных элементов в R

К сожалению, C ++ lambdas могут захватывать по ссылке, но не решают проблему « вверх по funarg ».

Для этого потребуется выделить захваченные локали в ячейках и сборку мусора или подсчет ссылок для освобождения. C ++ не делает этого, и, к сожалению, это делает C ++ lambdas намного менее полезным и более опасным, чем на других языках, таких как Lisp, Python или Javascript.

Более конкретно, в моем опыте вам следует избегать во что бы то ни стало скрытого захвата (т. е. используя форму [&](…){…}) для лямбда-объектов, которые выживают в локальной области, потому что это рецепт случайных segfaults позже во время обслуживания.

Всегда тщательно планируйте, что делать, а также о том, как и как захваченные ссылки.

Конечно, безопасно записывать все по ссылке с помощью [&], если все, что вы делаете, это просто использовать лямбда в той же области, чтобы передавать код, например, таким алгоритмам, как std::sort, не имея для определения именованной функции компаратора вне функции.

Подход, который может работать иногда, записывается по значению a shared_ptr в состояние, выделенное кучей. Это в основном реализует вручную то, что делает Python автоматически (но обратите внимание на циклы ссылок, чтобы избежать утечек памяти: у Python есть сборщик мусора, C ++ - нет).

1
задан nathan 13 July 2018 в 16:09
поделиться

1 ответ

Мы можем использовать регулярное выражение для соответствия шаблону для фильтрации строк

subset(df1, grepl("^02:01", V21.X2))
#   V21.X1   V21.X2
#1      A 02:01:03
#2      A 02:01:04

Или извлечь с помощью substr, а затем выполнить ==

subset(df1, substr(V21.X2, 1, 5)=='02:01')
#  V21.X1   V21.X2
#1      A 02:01:03
#2      A 02:01:04

Если набор данных является столбцом matrix, существует только столбец sngle, то есть «V21», который сохраняет matrix с двумя столбцами «X1» и «X2»

m1 <- cbind(X1 = "A", X2 = c("02:01:03", "02:01:04", "03:01:05", "03:01:04"))
df1 <- data.frame(V21 = rep(NA, 4))
df1$V21 <- m1
subset(df1,  grepl("^02:01", V21.X2))

Ошибка в grepl ("^ 02:01", V21.X2): объект 'V21.X2' не найден

Решение состояло в том, чтобы преобразовать столбцы в обычные столбцы в поле data.frame и выполните данные subset

df2 <- do.call(data.frame, df1)
subset(df2, grepl("^02:01", V21.X2))
#   V21.X1   V21.X2
#1      A 02:01:03
#2      A 02:01:04

df1 <- structure(list(V21.X1 = c("A", "A", "A", "A"), V21.X2 = c("02:01:03", 
 "02:01:04", "03:01:05", "03:01:04")), .Names = c("V21.X1", "V21.X2"
 ), class = "data.frame", row.names = c(NA, -4L))
0
ответ дан akrun 17 August 2018 в 12:26
поделиться
  • 1
    Я пробовал это, но он все еще говорит, что объект V21.X2 не найден – nathan 13 July 2018 в 16:15
  • 2
    @nathan Он основан на данных, которые вы показали – akrun 13 July 2018 в 16:15
  • 3
    @nathan Пожалуйста, проверьте str набора данных. Я думаю, что это matrix с одной колонкой – akrun 13 July 2018 в 16:16
  • 4
    Спасибо, что работали сейчас, и вы были правы, это была матрица! – nathan 13 July 2018 в 17:27
Другие вопросы по тегам:

Похожие вопросы: