我想将许多(最多 2000+)列分配给data.table
; 这个过程给我留下了深刻的印象,因为它非常可并行化,但似乎通过将相同的过程分data.table
发给许多工人来处理这个过程并没有得到很好的处理。
我希望以下工作:
library(data.table)
library(parallel)
NN = 100
JJ = 100
cl = makeCluster(2)
DT = data.table(seq_len(NN))
alloc.col(DT, 1.5*JJ)
clusterExport(cl, c("DT", "NN", "JJ"))
clusterEvalQ(cl, library(data.table))
parLapply(cl, seq_len(JJ), function(jj) {
set(DT, , paste0("V", jj), rnorm(NN))
})
stopCluster(cl)
但是,这会产生一个模糊的错误:
错误
checkForRemoteErrors(val)
:2 个节点产生错误;第一个错误:内部错误,请sessionInfo()
向 datatable-help 报告(包括结果):oldtncol (0) < oldncol (1) 但标记了类的 tl。
我想这是由于引用分配的工作原理。分配发生在每个线程上,但这不会DT
在全局环境中传回。
有没有办法data.table
并行添加列?