我的问题源于在用户创建的函数中使用[[
和]]
来引用列表元素。据我所知,[[
和]]
在应用于向量时与[
和]
的工作方式相同。
这是否适用于所有其他列表操作?另一个例子,我可以在矢量上使用lapply。
如果列表只是一个广义向量,其条目可以是不同的模式,那么这是正确的。
答案 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)