r - 使用并行的 parLapply : unable to access variables within parallel code

标签 r parallel-processing

我最近得到了一台具有多个内核的计算机,并且正在学习使用并行计算。我相当精通 lapply并被告知 parLapply工作原理非常相似。我没有正确操作它。看来我必须明确地将所有内容都放在 parLapply 中使其工作(即要使用的函数、变量等)。与 lapply它从父环境和 parLapply 读取似乎没有这样做。因此,在下面的示例中,我可以通过将所有信息放在 parLapply 中来使一切正常。但是如果我在用户定义的函数中使用它,我不能明确地放置 text.var内部 parLapply .

library(parallel)
text.var <- rep("I like cake and ice cream so much!", 20)
ntv <- length(text.var)
gc.rate <- 10

pos <-  function(i) {
    paste(sapply(strsplit(tolower(i), " "), nchar), collapse=" | ")
}

lapply(seq_len(ntv), function(i) {
        x <- pos(text.var[i])
        if (i%%gc.rate==0) gc()
        return(x)
    }

)

#doesn't work
cl <- makeCluster(mc <- getOption("cl.cores", 4))
parLapply(cl, seq_len(ntv), function(i) {
        x <- pos(text.var[i])
        if (i%%gc.rate==0) gc()
        return(x)
    }

)

#does work but have to specify all the stuff inside parLapply
cl <- makeCluster(mc <- getOption("cl.cores", 4))
parLapply(cl, seq_len(ntv), function(i) {
        ######stuff I have to put inside parLapply##########
        text.var <- rep("I like cake and ice cream so much!", 20)
        ntv <- length(text.var)
        gc.rate <- 10
        pos <-  function(i) {
            paste(sapply(strsplit(tolower(i), " "), nchar), collapse=" | ")
        }
        ######stuff I have to put inside parLapply##########
        x <- pos(text.var[i])
        if (i%%gc.rate==0) gc()
        return(x)
    }
)

如何通过text.var , ntv , gc.rate , 和 posparLapply没有明确地把它们放在里面? (我猜你以某种方式将它们作为列表传递)

PS windows 7机器所以我需要使用parLapply我认为

最佳答案

您需要将这些变量导出到集群中的其他 R 进程:

cl <- makeCluster(mc <- getOption("cl.cores", 4))
clusterExport(cl=cl, varlist=c("text.var", "ntv", "gc.rate", "pos"))

关于r - 使用并行的 parLapply : unable to access variables within parallel code,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12019638/

相关文章:

在R中 reshape csv文件

r - 在选定的环境中加载 r 包

c# - Parallels.ForEach 与 Foreach 花费相同的时间

c++ - MPI_Allreduce : very strange false results

c# - WPF 中的并行任务

ios - 并行运行多个 lldb 进程

R 包警告 : multiple methods tables found for 'direction'

r - R数据表-将值向量添加为列

r - R中的Web爬网:处理WebSites上的选项卡

java - 使用java并行流在非同步ArrayList中添加元素