2011-01-11 226 views
4

我有一個認識問題,將參數傳遞給在R.參數傳遞給函數

在下面的功能。例如,我檢索的名字命名列表中的值。當我直接做,它會返回值。但是,當我將相同的代碼放入函數中時,它將返回NULL。這裏發生了什麼?

由於提前, 米爾科

namedlist <- list(a=c("50", "80"), b=c("50")) 

namedlist$a 
# returns: [1] "50" "80" 

myfunction <- function(arg){ namedlist$arg } 
myfunction(a) 
# returns: NULL 

回答

7

您請求:

namedlist$arg

,當然沒有名稱爲"arg"namedlist,因此返回值的組件NULL

這種類型的子集劃分的名單將工作:

myfunction <- function(arg) { 
    namedlist[[arg]] 
} 

,並返回相同namedlist $一個,但你需要通過組件名稱爲一個字符串:

> namedlist$a 
[1] "50" "80" 
> myfunction(a) 
Error in myfunction(a) : object 'a' not found 
> myfunction("a") 
[1] "50" "80" 
+2

@Mirko此外,您還依賴於在全球工作空間中尋找某些東西的範圍。編寫`myfunction`將會是更好的做法,因爲它是獨立的,並且可以傳入所有必需的對象作爲參數。 `myfunction < - function(list,arg)`並且具有以下函數體`list [[arg]]`,並通過`myfunction(namedlist,「a」)調用它` – 2011-01-11 12:34:43