2013-04-18 80 views
0

在R我試圖從函數中返回一對,其中第一個元素是一個矢量,第二個元素是一個地圖。這裏是return語句:R返回一對

returnList = list("kmeansVector" = kmV, "clustMap" = clustMap) 
return(returnList) 

說,在控制檯我設置li這個函數的返回值。然後li[1]會給我kmV中的所有元素。我要的是做l[1][3]這會給我的第三個元素最初在kmV但[R告訴我,它是空:

> li[1][3] 
$<NA> 
NULL 

> attributes(li[1]) 
$names 
[1] "kmeansVector" 

kmVkmeans對象的5元載體。所以看起來當函數返回列表時,kmV中的每個元素都連接在一起。我如何得到最初出現在kmV的第3個元素

+1

嘗試'li [[1]] [3]'。我相信'li [1]'會返回一個包含你的向量的列表,這將使'[3]'尋找列表中的第三個元素(返回'NULL'因爲不存在)。 –

+0

BlueMagister完全正確。這與k-means或pair的概念無關,但與訪問列表的方式有關。 「[」函數返回一個子列表,其周圍有一個不可滲透的薄膜,以防止訪問。突破你需要「[[」。 –

回答

3

這個問題在Stack Overflow之前幾乎可以肯定地得到解答,但是我找不到它。所以這裏有一個地方的答案:

隨着以help(`[[`)幫助文件中描述,在遞歸(列表等)對象

索引由[類似於原子的載體和選擇的列表 指定的元素。

[[和$]選擇列表中的單個元素。主要差異 是$不允許計算指數,而[[確實。 x $ name是 等價於x [[「name」,exact = FALSE]]。此外,[[[可以使用確切參數進行控制]的部分匹配 行爲。

在列表上使用[返回一個列表,因爲[可以抓取列表中的多個元素。使用[[將返回該列表的元素。

下面是一個應該幫助解釋的例子。下面,a是兩個元素的列表。

> a <- list(1:4,letters[24:26]) 
> a 
[[1]] 
[1] 1 2 3 4 

[[2]] 
[1] "x" "y" "z" 

> a[1:2] 
[[1]] 
[1] 1 2 3 4 

[[2]] 
[1] "x" "y" "z" 

> a[1] #returns a list of length 1 containing the first element 
[[1]] 
[1] 1 2 3 4 

> a[[1]] #returns the first element 
[1] 1 2 3 4 

> a[[1:2]] #equivalent to a[[1]][[2]] 
[1] 2