将变量名称传递给函数并在R中循环输出

时间:2012-12-16 00:24:45

标签: r for-loop raster

这个问题似乎有变化,但似乎都没有解决在循环和命名和输出文件中的情况。我认为这可能有用:

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

提取功能来自光栅包。我已经创建了一系列RasterStack和SpatialPolygons,我想将它们传递给一个函数(&#34; extract&#34;),它有几个参数,其中一些我希望通过循环操作,并相应地标记输出。这在BASH中是轻而易举的,但我无法在R中弄清楚这一点。

最终,我也希望传递字符串,但another post似乎显示了那里的方式。

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

1 个答案:

答案 0 :(得分: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="")
               )
           )
      )
}

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

# 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)