2011-05-17 93 views
23

我是R初学者。浏览R文档,我偶然发现了这个句子?is.vector“If mode =”any“,is.vector可能为原子模式,列表和表达式返回TRUE。”为什么is.vector()为列表返回TRUE?

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

+3

伟大的问题。欢迎来到SO,@Quant Guy! – Andrie 2011-05-17 15:17:02

回答

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更多细节。

+0

+1感谢您的优秀解释和代码示例 – 2011-05-17 15:17:46

+0

这解释了为什么函数返回它为什么会返回。这并不能解释为什么这种语言是为什么。任何人都有这方面的见解? – Harlan 2011-05-20 16:30:00

11

请参阅R Internals手册的R Internal Structures部分(具体为第1.1.1节)。列表(就你所说的而言)是VECSXP,这是一种矢量。

+0

+1,谢谢!看起来我有更多的阅读要做。 – 2011-05-17 15:17:25

+0

@Quant Guy:你不需要学习内部函数来使用R,但是如果你想“看看引擎盖下”,这很有用。 – 2011-05-17 15:21:05

相关问题