这个问题似乎有变化,但似乎都没有解决在循环和命名和输出文件中的情况。我认为这可能有用:
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似乎显示了那里的方式。
编辑:我最初将上述函数发布为单个数据帧,实际上,它们是栅格包中的指定对象(最终是数据帧)。
答案 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)