作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我写了一个函数,我在其中定义变量和加载对象。这是一个简化版本:
fn1 <- function(x) {
load("data.RData") # a vector named "data"
source("myFunctions.R")
library(raster)
library(rgdal)
a <- 1
b <- 2
r1 <- raster(ncol = 10, nrow = 10)
r1 <- init(r1, fun = runif)
r2 <- r1 * 100
names(r1) <- "raster1"
names(r2) <- "raster2"
m <- stack(r1, r2) # basically, a list of two rasters in which it is possible to access a raster by its name, like this: m[["raster1"]]
c <- fn2(m)
}
fn2 <- function(x) {
fn3 <- function(y) {
x[[y]] * 100 * data
}
cl <- makeSOCKcluster(8)
clusterExport(cl, list("x"), envir = environment())
clusterExport(cl, list("a", "b", "data"))
clusterEvalQ(cl, c(library(raster), library(rgdal), rasterOptions(maxmemory = a, chunksize = b)))
f <- parLapply(cl, names(x), fn3)
stopCluster(cl)
}
Error in get(name, envir = envir) : object 'a' not found
最佳答案
调用 clusterExport(cl, list("a", "b", "data"))
时遇到错误因为clusterExport
正在尝试在 .GlobalEnv
中查找变量, 但是 fn1
没有在 .GlobalEnv
中设置它们但在它自己的本地环境中。
另一种方法是通过 fn1
的本地环境至fn2
,并将该环境指定为 clusterExport
.调用 fn2
将会:
c <- fn2(m, environment())
fn2
的参数是
function(x, env)
,然后调用
clusterExport
将会:
clusterExport(cl, list("a", "b", "data"), envir = env)
关于r - clusterExport、环境和变量范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20205819/
我写了一个函数,我在其中定义变量和加载对象。这是一个简化版本: fn1 <- function(x) { load("data.RData") # a vector named "data"
我是使用并行包的新手,并已开始探索它们以加快我的一些工作。我经常遇到的一个烦恼是 foreach当我没有时,命令会抛出问题 clusterExport相关的函数/变量。 例子 我知道下面的例子不一定需
我在这里问了一个相关的问题,回复效果很好:using parallel's parLapply: unable to access variables within parallel code 问题是
我是一名优秀的程序员,十分优秀!