<分区>
我的问题源于在用户创建的函数中使用 [[
和 ]]
来引用列表元素。据我所知,[[
和 ]]
的工作方式与 [
和 ]
相同载体。
所有其他列表操作都是这样吗?作为另一个示例,我可以在向量上使用 lapply。
如果一个列表只是一个广义向量,它的条目可以具有不同的模式,那么这是有道理的。
<分区>
我的问题源于在用户创建的函数中使用 [[
和 ]]
来引用列表元素。据我所知,[[
和 ]]
的工作方式与 [
和 ]
相同载体。
所有其他列表操作都是这样吗?作为另一个示例,我可以在向量上使用 lapply。
如果一个列表只是一个广义向量,它的条目可以具有不同的模式,那么这是有道理的。
最佳答案
编辑:一行半的答案是列表和原子向量都是向量类型,并且子集的方式完全相同。
这个答案扩展了列表和原子向量之间的区别。
对 R 的数据结构,特别是列表和原子向量之间的数据结构,最好的解释是(在我看来)Hadley Wickham 的新书: http://adv-r.had.co.nz/Data-structures.html
列表和原子向量都是一维数据结构。但是,原子向量是同类的,而列表是异构的。列表可以包含任何类型的向量,包括其他列表。另一方面,原子向量是扁平的。
就使用 []
与 [[]]
进行子集化而言,[]
为列表和原子向量保留,其中[[]]
正在简化。因此,[]
和 [[]]
是不同的,无论是应用于列表还是原子向量。例如,[[]]
将通过删除名称来简化命名向量;通过 []
子集命名向量将保留名称。对于一个列表,[[]]
会拉出一个列表的内容,并且可以返回一些简化的数据结构。通过 []
子集列表将始终返回一个列表(保留)。
用 [[]]
对原子向量进行子集化会返回一个长度为 1 的原子向量。通过 [[]]
子集列表可以返回许多不同类的数据结构。这可以追溯到原子向量是同质的而列表是异质的这一事实。但是,根据 Hadley 的说法,对列表进行子集化的工作方式与对原子向量进行子集化的方式完全相同。
查看 Hadley 书中的这一部分以作进一步引用: http://adv-r.had.co.nz/Subsetting.html#subsetting-operators
关于r - R 列表是广义向量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23420913/