这与我之前关于data.table
for 循环和函数的便利性的问题有关:如何在函数和循环中使用 data.table?和相关帖子:Data.table 元编程。
这个小代码显示了使用data.table
它完成的方便程度(例如与 比较dplyr
)。
起初,我cannot change value of locked binding for '.SD'
在使用get(strY)
或.SD
/.SDcols=colY
下面时出错。但是当我重新启动 R 会话时,一切正常。
dt <- data.table(ggplot2::diamonds)
nY <- 1; nX <- c(5:7)
strY <- names(dt)[nY]; strX <- names(dt)[nX];
dt[,strY, with=F] # OK
dt[,nY, with=F] # OK
dt[,get(strY)] # OK NOW:
#NO MORE: Error in assign(ii, SDenv$.SDall[[ii]], SDenv) :
# cannot change value of locked binding for '.SD'
dt[, .SD, .SDcols=strX] # OK NOW:
#NO MORE Error in assign(ii, SDenv$.SDall[[ii]], SDenv) :
# cannot change value of locked binding for '.SD'
通过重新启动 R 会话以某种方式解决了这个问题。- 所有线路都有效。这段代码已经成为我所有循环/函数需求的关键工作石。感谢审稿人!
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句