为什么is.vector()为列表返回TRUE?

时间:2011-05-17 14:57:50

标签: r

我是R初学者。浏览R文档,我偶然发现了?is.vector这句话: “如果mode =”any“,is.vector可能会为原子模式,列表和表达式返回TRUE。”

我只是好奇 - 为什么?我读过的所有文档都指出列表和向量是两种不同的数据类型。是否有一些更深入的R数据类型概念我没有得到?

2 个答案:

答案 0 :(得分:15)

列表(在大多数情况下)本身就是一个向量。来自?list的帮助文件:“R内部的大多数列表都是通用向量,而传统的点对列表(如LISP中)可用,但用户很少看到(除了作为函数的形式)。”

这意味着您可以使用vector为列表预先分配内存:

x <- vector("list", 3)
class(x)
[1] "list"

现在为列表中的第二个元素分配一个值:

x[[2]] <- 1:5

x

[[1]]
NULL

[[2]]
[1] 1 2 3 4 5

[[3]]
NULL

有关详细信息,请参阅?list?vector

答案 1 :(得分:11)

请参阅R Internal Structures手册的R Internals部分(特别是第1.1.1节)。列表(在您所说的意义上)是VECSXP,一种向量。