在for循环中创建新data.table列时未显示

在for循环中创建新data.table列时未显示,r,data.table,eval,R,Data.table,Eval,我正在尝试在for循环中创建列名。例如,假设我有以下数据 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(i in seq(1:1)) { # 1:1 not a bug. varname = 'fla

我正在尝试在for循环中创建列名。例如,假设我有以下
数据

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(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循环中创建布尔列名,该循环应用于本身存储为字符串向量的列。感谢您的指点。

我认为这可能是这个问题的重复

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

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
}

第一行没有右括号。仅供参考,在当前版本中还有
dt[,(varname):=get(cname)>threshold]
,或者可能是
dt[,(varname):=get(cname)>…threshold]
(我目前无法对其进行测试)。可能是非常奇怪的副本,但它解决了我的问题!谢谢我只是希望这在谷歌搜索中更容易找到,我用不同的方式搜索了很多,但是没有找到。