Создание новых столбцов data.table внутри цикла for не отображается - PullRequest
0 голосов
/ 24 мая 2018

Я пытаюсь создать имена столбцов в цикле for.Например, скажем, у меня есть следующее data.table

dt = structure(list(id = c("a", "b", "c"), val = c(1, 4, 6)), .Names = c("id", 
"val"), row.names = c(NA, -3L), class = c("data.table", "data.frame"
))

Я запускаю for -петл следующим образом

for(i in seq(1:1)) { # 1:1 not a bug. 
  varname = 'flag1'
  cname = 'val'
  threshold = 4
  expr = parse(text=paste0(varname, ' := (', cname, ' > ', threshold, ')'))
  dt[, eval(expr)]
}

Каким-то образом, когда я не используйте цикл for и просто установите i=1, это работает, то есть создается новый столбец с именем flag1.Но если я запускаю его с циклом for, то data.table и я print(dt) ничего не получаю.Может кто-то указать, что я делаю не так?Мой реальный пример использования заключается в создании логических имен столбцов в цикле for, который применяется к столбцам, которые сами хранятся как вектор строк.Любые указатели приветствуются.

1 Ответ

0 голосов
/ 24 мая 2018

Я думаю, что это может быть дубликатом этой проблемы объекты data.table, не напечатанные после возврата из функции

Попробуйте добавить второй набор квадратных скобок в последнюю строку цикла

for(i in seq(1:1)){ 
varname = 'flag1'
cname = 'val'
threshold = 4
expr = parse(text=paste0(varname, ' := (', cname, ' > ', threshold, ')'))
df[, eval(expr)][] #add brackets here
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...