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 (将#修改为@)