|
列表
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)中的分量名字会被排除在外
的1。后者得到的则是列表Lst 中仅仅由第一个元素构成的子列表。如果是命名列表,
分量名字会传给子列表的。
分量名字可以简写2,原则是只要能很好的区分所有分量就行。因此Lst$coefficients
可以简写为Lst$coe 而Lst$covariance 可以简写成Lst$cov。
名字向量(记录分量名字的向量)可以简单地看作是列表的一个属性,能像其他
属性一样操作。除了列表,其他的结构对象也可能会给出一个类似的名字(names)属
性。
|
|