在for循环中创建新的data.table列而不显示

时间:2018-05-23 22:49:38

标签: r data.table eval

我正在尝试在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 :(得分:2)

我认为这可能是此问题的重复data.table objects not printed after returned from function

尝试在循环的最后一行添加第二组方括号

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
}