2015-11-03 19 views
0

我有一個對象,它是st如何爲變量名寫一個函數?

str(st) 
List of 34 
$ cell_ele : num [1:2000, 1:1000] 999 999 ... 

現在我想編寫一個函數

myfun <- function(var){ 
rt= st$var 
rt=raster(rt) 
out <- writeRaster(rt, filename = "C:\\var_data") 
         } 

var將被使用了兩次,被讀取,然後是輸出文件名

的一部分
myfun (cell_ele) 
Error in raster(matrix(data = rt)) : 
error in evaluating the argument 'x' in selecting a method for function 
'data' must be of a vector type, was 'NULL' 

我試過它沒有功能,它工作正常。問題是在功能

回答

1

看看這個命令函數體裏面寫:

rt= st$var 

這將尋找一個名爲變量stVAR列。它不會用var替代變量的內容作爲參數。

相反,你應該寫:

rt = st[var] 

所以,請改變像這樣的功能:

myfun <- function(var){ 
    rt= st[var] 
    rt=raster(rt) 
    out <- writeRaster(rt, filename = paste("C:\\", var, "_data", sep="")) 
} 

將做替代,並查找其名稱由參數定義的列你傳遞給函數。我們還利用功能paste,因爲我們希望有一個變量名:

粘貼轉換它的參數(通過as.character)爲字符串,並連接它們(由九月給出的字符串分隔它們)。如果參數是矢量,則它們按照術語連接在一起以給出一個字符矢量結果。

此外,你應該傳遞一個字符串參數:

myfun ("cell_ele") 

的[[形式允許僅單個元件的使用整數或字符索引來選擇,而[允許索引用向量。請注意,對於列表或其他遞歸對象,索引可以是矢量,矢量的每個元素依次應用於列表,所選組件,所選組件的所選組件等等。結果仍然是一個單一的因素。

使用$的表單適用於遞歸對象,如列表和pairlists。它只允許使用文字字符串或符號作爲索引。也就是說,索引不可計算:對於需要評估表達式以查找索引的情況,請使用x [[expr]]。將$應用於非遞歸對象時,結果始終爲NULL:從R 2.6.0開始,這是一個錯誤。

+0

當您編寫rt < - st [var]時,var將被您的參數替代。當你想通過'[]'操作符來訪問它時,你應該寫rt = st [「cell_ele」] – nikaltipar

+1

我以爲OP會想'[[''不''',但我不熟悉'writeRaster'期待什麼,所以我不能100%確定。 – joran

+0

Thanks.that工作。名稱如何。輸出名稱爲'var'不是我在函數 – temor

相關問題