分配值以覆盖R?

时间:2019-06-11 13:32:04

标签: r r-raster

我的问题是分配值给叠加层时。

  library(raster)
  beginCluster(10)
  r <- raster(ncol=10, nrow=10)
  r1 <- init(r, fun=runif)
  r2 <- init(r, fun=runif)
  s=stack(r1,r2,r2,r1,r2,r1)
  wi=c(3,5,7)


  fun1 = function(x) {overlay(x, fun=function(x) movingFun(x, fun=mean, n=3))}
  vm = clusterR(s, fun1, progress = "text")

没问题!

但是当我将n分配给wi时没有用

 for(i in 1:3) {
   fun1 = function(x) {overlay(x, fun=function(x) movingFun(x, fun=mean, n=wi[i]))}
   vm = clusterR(s, fun1, progress = "text")
 }

我收到此错误

  

不能使用此公式,可能是因为它没有向量化”

1 个答案:

答案 0 :(得分:2)

该函数内部的所有内容都必须传递给它-由于群集的运行方式,它不会从您的环境中获取任何东西。

因此将wii传递给您的函数:

fun2 = function(x, wi, i) {
    overlay(x, 
     fun=function(x) movingFun(x, fun=mean, n=wi[i]))}

并在对clusterR的调用中将它们列为args:

for(i in 1:3){
 vm = clusterR(s, fun2, list(wi, i), progress = "text")
}