Next: , Previous: Lists and data frames, Up: Lists and data frames



6.1 列表

R 的 列表(list)是一个以对象的有序集合构成的对象。 列表中包含的对象又称为它的分量(components)。

分量可以是不同的模式或者类型, 如一个列表可以包括数值向量,逻辑向量,矩阵,复向量, 字符数组,函数等等。 下面是一个例子演示怎么创建列表:

     > Lst <- list(name="Fred", wife="Mary", no.children=3,
                   child.ages=c(4,7,9))

分量常常会被编号的(numbered),并且可以利用它来 访问分量。如果向量Lst 有四个分量, 这些分量可以用 Lst[[1]], Lst[[2]], Lst[[3]]Lst[[4]] 独立访问。如果 Lst[[4]] 是一个有下标的数组,那么 Lst[[4]][1] 就是 该数组的第一个元素了。

因为 Lst 是一个列表,所以函数 length(Lst) 给出的 仅仅是分量的数目(最高层次的)。

列表的分量可以被命名,这种情况下 可以通过名字访问。这时,可以 把字符串形式的分量名字放在列表名后面的双中括号中,或者干脆 采用下面的形式

     > name$component_name

完成一样的目的。

这种方法非常有用。使你在忘记分量编号的时候, 可以很容易找到想要的东西。

因此在上面给定的例子中,

Lst$nameLst[[1]] 返回结果都是 "Fred",

Lst$wifeLst[[2]] 返回的则是 "Mary",

Lst$child.ages[1]Lst[[4]][1] 返回一样的 数字 4

另外你同样可以在双中括号中使用列表分量的名字, 也就是和Lst$name 等价的 Lst[["name"]] 。 当分量的名字保存在另外一个变量中时,这种方法 特别的有用。就如下面的例子所示

     > x <- "name"; Lst[[x]]

特别要注意一下 Lst[[1]]Lst[1] 的差别。 [[...]] 是用来选择单个 元素的操作符,而 [...] 是一个更为一般 的下标操作符。 因此前者得到的是列表 Lst 中的第一个对象, 并且含有分量名字的命名列表(named list)中分量的名字会被排除在外的。 后者得到的则是列表 Lst 中仅仅由第一个元素 构成的子列表。如果是命名列表, 分量名字会传给子列表的。

分量名字可以简写1,原则是只要能很好的区分所有分量就行。 因此 Lst$coefficients 可以简写为 Lst$coeLst$covariance 可以简写成 Lst$cov

名字向量(记录分量名字的向量)实际上可以简单地看作是列表的一个属性,可以像其他属性一样 操作。除了列表,其他的结构对象也 可能会给出一个相似的名字属性。


Footnotes

[1] 译者注:当然这里的简写指的是在原来命名的基础上, 采用开头连续的几个字母。