我猜我的问题可以归结为:如何在R data.table行的RHS上将列名作为参数(在变量中)而不是文字?
我的示例问题:
这有效:
input_table[, temp_logical :=
input_table[,ID_lag_0] ==
input_table[,ID_lag_1]]
这(第1部分)有效:
# ... K > 0 at this point
ID_shifted_newcol_names = paste("ID_lag_", 0:K, sep = "")
input_table[, eval(ID_shifted_newcol_names[1]) := ID] #lag 0 element
for(k in 1:K){ #elements with lag 1...k
input_table[, eval(ID_shifted_newcol_names[k+1]) := shift(ID, type = "lag", n = k)]
}
到目前为止一直很好,所以下面的LHS应该按预期工作,RHS必须有问题,这(第2部分)不起作用:
#now test if lagged and previous ID row are different
for(k in 1:K){
input_table[, temp_logical :=
eval(input_table[,ID_shifted_newcol_names[k]) ==
eval(input_table[,ID_shifted_newcol_names[k+1]) # always F
}
结果总是F;我猜这是因为比较两个字符串的eval而不是两个不同名称的值。
现在我尝试将eval(和没有eval)封装到'as.name','as.symbol','deparse(substitute(...))'中,但无法使其工作。