【发布时间】:2021-10-24 05:27:56
【问题描述】:
我有一个循环,我试图以编程方式将多组两列添加在一起。
lapply(c("V1", "V2", "V3"),
function(x){
db[, x := get(paste(x, "ACC", sep = "_")) + get(paste(x, "SIC", sep = "_"))] ## e.g. INCIDENT_RATE_STD := INCIDENT_RATE_STD_ACC + INCIDENT_RATE_STD_SIC
})
我希望 paste(x, "ACC", sep = "_") 返回 "V1_ACC" 但是在函数的操作中,它首先评估 x 并告诉我 V1 还不存在。我对 R 的排序有什么误解?
在上面,db 是一个 data.table。
编辑:我刚刚发现问题出现在其他地方,在之前的代码中:
db[[x]][, LAPSE_DUR := pmin(max(tbls[[x]]$LAPSE_DUR), DURATION_Y)]
在上面,db 和 tbls 是 data.tables 的列表。它现在无法评估 tbls[[x]],因为它试图在 db[[x]] 环境中评估它,而不是在更高级别的环境中评估它。
【问题讨论】:
-
如果您创建一个小的可重现示例以及预期的输出,这将更容易提供帮助。阅读how to give a reproducible example。
-
关于您的编辑,请您显示错误消息吗?
x是什么?而且,正如您所说的,在以前工作的代码中发生了什么变化:?谢谢。
标签: r data.table lapply