2

这个问题似乎有变体,但似乎没有一个解决处于循环和命名和输出文件中的情况。我认为这可能如何工作:

for(j in 1:3) {
    for(k in 1:17){
       extract_[j]km <- extract(RasterStack, SpatialPolygonsDataFrame_[j]km, layer=[k], nl=1, df=TRUE)
    }
}

extract 函数来自 raster 包。我已经创建了一系列 RasterStacks 和 SpatialPolygons,我想将它们传递给具有多个参数的函数(“提取”),其中一些我希望通过循环进行操作,并相应地标记输出。这在 BASH 中是一件轻而易举的事,但我无法在 R 中解决这个问题。

最终,我也想传递字符串,但另一篇文章似乎显示了那里的方式。

编辑:我最初将上述函数发布为单个数据框,而实际上,它们是栅格包中的指定对象(最终是数据框)。

4

1 回答 1

4

正如 Justin 所指出的,使用列表更符合 R 的结构,而不是使用大量命名变量来搞乱工作区。当您在工作区中有很多对象要“知道”接下来会发生什么时,工作很快就会变得具有挑战性。

你的方式:

for(j in 1:3) { 
assign(
   paste("extract",j,"km",sep=""), # or paste0 to avoid need for sep=""
   function(
            get(
                paste("data",j,"km",sep="")
               )
           )
      )
}

就个人而言,我更喜欢使用列表,因此在下面,我将您的数据对象转换为列表,并向您展示如何在该列表的所有元素上运行函数。以这种方式工作通常会降低以“get”和“assign”方式使用字符串的需要。

# just converting your variables to a list    
data.list <- mget(grep("data",ls(),value=TRUE),envir=.GlobalEnv) 

# then output results
result.list <- lapply(data.list,your_function) 
于 2012-12-16T00:52:14.070 回答