2013-09-24 28 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]]'),这个细微但重要的差异也会变得更加清晰。 –

相关问题