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$name 和 Lst[[1]] 返回结果都是
"Fred",
Lst$wife 和 Lst[[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$coe 而 Lst$covariance
可以简写成 Lst$cov。
名字向量(记录分量名字的向量)实际上可以简单地看作是列表的一个属性,可以像其他属性一样 操作。除了列表,其他的结构对象也 可能会给出一个相似的名字属性。