【发布时间】:2014-11-28 13:47:49
【问题描述】:
我正在尝试使用parallel::mclapply来加快以下代码的计算速度:
library(raster)
library(HistogramTools)#for AddHistogram
#Create a first h here for the first band... omitted for brevity
readNhist <- function(n,mconst) {
l <- raster(filename[i], varname=var[i], band=n, na.rm=T)
gain(l) <- mconst
h <<- AddHistograms(h, hist(l, plot=F, breaks=histbreaks,right=FALSE))
}
lapply( 1:10000, readNhist, mconst=1, mc.cores=7 )
#Then do stuff with the h histogram...
执行上述代码时,一切正常。如果使用 mclapply(如下),结果与我想要获得的结果相差甚远:直方图都是错误的。
library(raster)
library(HistogramTools)#for AddHistogram
library(parallel)
#Create a first h here for the first band... omitted for brevity
readNhist <- function(n,mconst) {
l <- raster(filename[i], varname=var[i], band=n, na.rm=T)
gain(l) <- mconst
h <<- AddHistograms(h, hist(l, plot=F, breaks=histbreaks,right=FALSE))
}
mclapply( 2:10000, readNhist, mconst=1 )
#Then do stuff with the h histogram...
我觉得将并行计算应用于此函数时我缺少一些重要的东西。
【问题讨论】:
-
你的问题的根源是在你的函数中使用
<<-。不要那样做。让你的函数返回hist(l, ...)并在循环外组合直方图(可能使用Reduce,我不知道AddHistograms)。 -
在你的文字中,你在下面提到了
mclapply,但实际上,代码在文字的上面。这是一个错字还是我遗漏了什么? -
@RomanLuštrik,我的错,我现在就解决这个问题。错字。
-
@Roland,感谢您的提示,我会尽快了解。我怀疑
-
请自行回答。
标签: r parallel-processing lapply mclapply