2011-05-17 185 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

相關問題