2013-06-26 53 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高興! –