用于R的堆栈函数(栅格库)的参数

时间:2013-06-26 17:02:43

标签: r stack

我正在尝试使用R中Raster库的堆栈函数创建一个RasterStack对象,

library(raster)

但是我遇到了函数中使用的参数的问题。让我展示一下我在做什么:

###set working directory
setwd("myworkingdirectory")

###Upload variables
v1 <- raster("variable1.tif")
v2 <- raster("variable2.tif")
v3 <- raster("variable3.tif")
v4 <- raster("variable4.tif")

所以,如果我输入:

###Creating RasterStack object
var.stacked <- stack(v1, v2, v3)

该函数正常工作并堆叠三个变量。

但是,我必须针对所需变量数量不同的不同运行执行此过程,因此我创建了一个循环,该循环输出具有正确数量和每个运行的变量类型的字符变量。例如:

###Output from loop
print(num.vars)
[1] "v1" "v3" "v4"         

我试着编写类似下面的代码,希望让这个过程正常运行,但事实并非如此:

var.stacked <- stack(num.vars)

Error in .local(.Object, ...) : 
  `myworkingdirectory\e1' does not exist in the file system,
and is not recognised as a supported dataset name.


Error in .rasterObjectFromFile(x, band = band, objecttype = "RasterLayer",  : 
  Cannot create a RasterLayer object from this file. (file does not exist)

为什么R试图找到我在代码开始时设置的工作目录中的变量名(v1,v2,v3,v4),而不是默认的.GlobalEnv,就像我在显式写入堆栈(v1,v2 ......)?

任何有助于使代码工作的帮助将非常感激。我对R也不是很有经验,这是我第一次在这里发帖提问,所以如果我的问题需要更多澄清,请告诉我。

提前谢谢!

1 个答案:

答案 0 :(得分:3)

因为您将字符向量传递给stack,然后将其解释为当前工作目录中的文件名。相反,如果您已经在R ...

中创建了栅格对象,则可以执行此操作
stack( mget( num.vars , env = .GlobalEnv ) )

mget获取栅格对象名称的字符向量,并返回栅格对象列表。

stack然后将列表中的栅格堆叠为stack