2013-06-26 22 views
2

我想创建与R中的栅格库堆栈功能的RasterStack对象堆栈功能(光栅库),参数用于对R

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并不是很有经验,这是我第一次在这里发表问题,所以如果我的问题需要更多的澄清,请让我知道。

预先感谢您!

回答

3

因为您将字符向量传递给stack,然后将其解释为当前工作目录中的文件名。相反,你可以做到这一点,如果你已经R中创建了光栅对象...

stack(mget(num.vars , env = .GlobalEnv)) 

mget采用光栅对象名称的特征向量,并返回栅格对象的列表。

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

+0

太棒了!非常感谢SimonO101! – user2524854

+0

@ user2524854高兴! –