我是R初学者。浏览R文档,我偶然发现了这个句子?is.vector
: “If mode =”any“,is.vector可能为原子模式,列表和表达式返回TRUE。”为什么is.vector()为列表返回TRUE?
我只是好奇 - 为什么?我读过的所有文档都指出,列表和向量是两种不同的数据类型。有没有更深入的R数据类型概念,我没有得到?
我是R初学者。浏览R文档,我偶然发现了这个句子?is.vector
: “If mode =”any“,is.vector可能为原子模式,列表和表达式返回TRUE。”为什么is.vector()为列表返回TRUE?
我只是好奇 - 为什么?我读过的所有文档都指出,列表和向量是两种不同的数据类型。有没有更深入的R数据类型概念,我没有得到?
列表(在大多数情况下)本身就是一个向量。来自?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感谢您的优秀解释和代码示例 – 2011-05-17 15:17:46
这解释了为什么函数返回它为什么会返回。这并不能解释为什么这种语言是为什么。任何人都有这方面的见解? – Harlan 2011-05-20 16:30:00
请参阅R Internals手册的R Internal Structures部分(具体为第1.1.1节)。列表(就你所说的而言)是VECSXP
,这是一种矢量。
+1,谢谢!看起来我有更多的阅读要做。 – 2011-05-17 15:17:25
@Quant Guy:你不需要学习内部函数来使用R,但是如果你想“看看引擎盖下”,这很有用。 – 2011-05-17 15:21:05
伟大的问题。欢迎来到SO,@Quant Guy! – Andrie 2011-05-17 15:17:02