问题描述
data.table
对象可以通过引用修改,并且在函数内部修改时不会重新创建。如果我用 data.table
修改 lapply
的列表,我就会有这种行为。但是,BiocParallel::bplapply
不会出现这种行为:
library(data.table)
l = list(data.table(x = letters[1:3],y = 1),data.table(x = letters[3:5],y = 2))
function1 <- function(DT){
DT[x == "b",y := 10]
function2(DT)
invisible(NULL)
}
function2 <- function(DT){
DT[x == "c",y := 100]
invisible(NULL)
}
invisible(lapply(l,function(df) function1(df)))
l
[[1]]
x y
1: a 1
2: b 10
3: c 100
[[2]]
x y
1: c 100
2: d 2
3: e 2
使用 BiocParallel:
l = list(data.table(x = letters[1:3],y = 2))
library(BiocParallel)
BiocParallel::Multicoreparam()
invisible(BiocParallel::bplapply(l,function(df) function1(df)))
l
[[1]]
x y
1: a 1
2: b 1
3: c 1
[[2]]
x y
1: c 2
2: d 2
3: e 2
有没有办法在 BiocParallel
中修复它?
> sessionInfo()
R version 4.0.3 (2020-10-10)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 16.04.7 LTS
Matrix products: default
BLAS: /usr/lib/libblas/libblas.so.3.6.0
LAPACK: /usr/lib/lapack/liblapack.so.3.6.0
locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
[3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
[5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
[7] LC_PAPER=en_US.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics Grdevices utils datasets methods base
other attached packages:
[1] BiocParallel_1.22.0 data.table_1.13.4
loaded via a namespace (and not attached):
[1] compiler_4.0.3 parallel_4.0.3 tools_4.0.3
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)