R列出广义向量吗?

时间:2014-05-02 04:47:09

标签: r list vector

我的问题源于在用户创建的函数中使用[[]]来引用列表元素。据我所知,[[]]在应用于向量时与[]的工作方式相同。

这是否适用于所有其他列表操作?另一个例子,我可以在矢量上使用lapply。

如果列表只是一个广义向量,其条目可以是不同的模式,那么这是正确的。

2 个答案:

答案 0 :(得分:2)

编辑:一行半的答案是列表和原子矢量都是矢量类型,子集的方式完全相同。

这个答案扩展了列表与原子向量之间的差异。

对R的数据结构,特别是列表和原子向量之间的最佳解释是(在我看来)Hadley Wickham的新书: http://adv-r.had.co.nz/Data-structures.html

列表和原子向量都是1维数据结构。然而,原子向量是同质的并且列表是异构的。列表可以包含任何类型的向量,包括其他列表。另一方面,原子向量是平坦的。

就使用[] vs [[]]进行子集化而言,[]保留了列表和原子向量,其中[[]]正在简化。因此,[][[]]不相同,无论是否应用于列表OR原子向量。例如,[[]]将通过删除名称来简化命名向量;通过[]对命名向量进行子集化将保留名称。对于列表,[[]]将提取列表的内容,并可以返回许多简化的数据结构。按[]子集列表将始终返回一个列表(保留)。

通过[[]]子集原子向量返回一个长度为1的原子向量。按[[]]子集列表可以返回许多不同类别的数据结构。这可以追溯到原子矢量是同质的并且列表是异构的事实。但是,根据Hadley的说法,对列表进行子集化的方式与对原子向量进行子集的方式完全相同。

看一下Hadley的书的这一部分,以供进一步参考: http://adv-r.had.co.nz/Subsetting.html#subsetting-operators

答案 1 :(得分:1)

由于我无法提出更多的反例,我提到了R内部的文档,看来你的直觉是正确的。

如果你看一下C中R的数据结构的基础结构部分, SEXPTYPEs,列表暗示是通用向量:

  

19 VECSXP列表(通用向量)