如何解决BiocParallel 无法通过函数持久化 data.table
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 举报,一经查实,本站将立刻删除。