【问题标题】:R: loading multiple RData with mclapply doesn't workR:使用 mclapply 加载多个 RData 不起作用
【发布时间】:2020-11-02 04:31:44
【问题描述】:

我想在一个命令中加载多个 RData,正如 Johua 所解释的那样使用

> lapply(c(a_data, b_data, c_data, d_data), load, .GlobalEnv)
[[1]]
[1] "nRTC_Data"

[[2]]
[1] "RTA_Data"

[[3]]
[1] "RTC_Data"

[[4]]
[1] "RTA_Data"

> rm(a_data, b_data, c_data, d_data); ls()
 [1] "nRTC_Data"       "RTA_Data"           "RTAC_data"     "RTC_Data"    
      

但是,由于我的 RData 很大,并且我发现 lappy() 和多个 load() 之间没有时间改进,我决定使用如下多核方法:

library(parallel)
mclapply(c(a_data, b_data, c_data, d_data),load,.GlobalEnv, mc.cores = parallel::detectCores())

虽然这显着改善了加载时间,但也返回了列表

   [[1]]
    [1] "nRTC_Data"
    
    [[2]]
    [1] "RTA_Data"
    
    [[3]]
    [1] "RTC_Data"
    
    [[4]]
    [1] "RTA_Data"

在我的工作区,什么都找不到

> rm(a_data, b_data, c_data, d_data); ls()
character(0)

我也尝试将.GlobalEnv 替换为environment(),但还是不行。

有人知道吗?

仅供参考,您可以尝试以下命令:

> a = "aa";save(a, file = "aa.RData")
> b = "bb";save(b, file = "bb.RData")
> c = "cc";save(c, file = "cc.RData")
> d = "dd";save(d, file = "dd.RData")

> # lapply approach
> rm(list = ls())
> a = "aa.RData"; b = "bb.RData"; c = "cc.RData"; d = "dd.RData"
> lapply(c(a, b, c, d), load, .GlobalEnv); rm(a, b, c, d) 

> # mclapply approach
> rm(list = ls())
> a = "aa.RData"; b = "bb.RData"; c = "cc.RData"; d = "dd.RData"
> mclapply(c(a, b, c, d), load, .GlobalEnv, mc.cores = parallel::detectCores()); rm(a, b, c, d)

【问题讨论】:

    标签: r load rdata mclapply


    【解决方案1】:

    我认为这是因为当使用mclapply 时,底层的分叉会创建单独的进程。在下面的代码中,我使用 mclapplymyload 函数来加载 Rdata 文件并返回加载的对象。与你的lapply 版本不同的是,你有mclapply 返回的列表中的数据

    myload <- function(x){
      x <- load(x)
      get(x)
    }
    
    a = "aa.RData"; b = "bb.RData"; c = "cc.RData"; d = "dd.RData"
    
    res <- mclapply(c(a, b, c, d), myload, mc.cores = parallel::detectCores()); 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-01
      • 1970-01-01
      相关资源
      最近更新 更多