2013-09-24 53 views
0

我有一個是由以下元素的列表L:爲什麼我無法在R中獲得此列表的元素?

> l 
$quad_freqs 
      [,1]  [,2]  [,3]  [,4]  [,5]  [,6] 
sol 0.0002308597 0.004155474 0.00623358 0.02493248 0.02576132 0.0748037 
      [,7]  [,8]  [,9]  [,10]  [,11] 
sol 0.02493029 0.2318451 0.05612928 0.3593334 0.1916445 

我知道L是一個列表,因爲我打字

> class(l) 
[1] "list" 

但是,我不能讓列表的元素。例如,

> l[[1]] 
      [,1]  [,2]  [,3]  [,4]  [,5]  [,6] 
sol 0.0002308597 0.004155474 0.00623358 0.02493248 0.02576132 0.0748037 
      [,7]  [,8]  [,9]  [,10]  [,11] 
sol 0.02493029 0.2318451 0.05612928 0.3593334 0.1916445 
> l[[2]] 
Error in l[[2]] : subscript out of bounds 
> l[[0]] 
Error in l[[0]] : attempt to select less than one element 

我甚至嘗試了單支架操作,但沒有工作,要麼:

> l[2] 
$<NA> 
NULL 

> l[0] 
named list() 

我怎樣才能獲得列表的元素?

這是我第一次使用R,很抱歉如果這是一個愚蠢的問題。

回答

3

從打印l的方式看來,它看起來是一個元素列表,其第一個(唯一)元素是一行矩陣。事情是這樣的:

l <- list(quadreps=matrix(rnorm(5), nrow=1)) 
l 
# $quadreps 
#   [,1]  [,2]  [,3]  [,4]  [,5] 
# [1,] 0.5060329 -0.6333043 0.6637485 0.7293132 -1.330237 

要訪問的元素矩陣,你需要首先從列表中提取它,無論是使用$[[]],再往子集它。要提取quadrep的第三列的元素,例如,使用任何如下:

l$quadreps[1,3] 
# [1] -0.9604139 

l[["quadreps"]][1,3] 
# [1] -0.9604139 

l[[1]][1,3] 
# [1] -0.9604139 
+0

謝謝,我測試了它,你是對的。 – Jessica

+5

如果你想了解一個R對象的結構,'str'是你的朋友。 'str(l)'顯示'1 $ quadreps列表:num [1,1:5] 0.9435 -0.0596 1.0032 1.6427 0.2678' – unique2

+1

What @ unique2說的。另外,在執行str(l)後,你可以繼續「向下鑽取」對象,嘗試像'str(l $ quadreps)','class(l $ quadreps)'等。注意,使用'l [1]'返回一個元素列表,其第一個元素包含'quadreps',而'l [[1]]'返回'quadreps'本身。如果你比較'str(l [1])'和'str(l [[1]]'),這個細微但重要的差異也會變得更加清晰。 –

相關問題