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)中的分量名字会被排除在外的1。后者得到的则是列表 Lst 中仅仅由第一个元素构成的子列表如果是命名列表, 分量名字会传给子列表的。

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

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


results matching ""

    No results matching ""