为什么对象是矢量?

时间:2012-07-22 01:39:52

标签: r

> x=c(1,2,3,4,5)  
> x1=list(n1=1,n2=2,n3=x)  
> is.vector(x1)  

[1] TRUE

> is.list(x1)  

[1] TRUE

为什么is.vector(x1)= true?我无法理解。

3 个答案:

答案 0 :(得分:3)

来自?is.vector

  

如果mode =“any”,则is.vector可以为原子模式,列表和表达式返回TRUE。

如果您不希望mode为[{1}}

返回is.vector,则可以指定TRUE
list

答案 1 :(得分:2)

> is.atomic(x1)
[1] FALSE

R language definition开始,列表是通用向量,而不是原子向量

答案 2 :(得分:1)

R中的向量是有序的东西集合。在这种情况下的东西是

> mode(x1)
[1] "list"

来自帮助文件

如果x是指定模式的向量而没有名称以外的属性,则

is.vector返回TRUE。

> attributes(x1)
$names
[1] "n1" "n2" "n3"

如果我们给x1另一个属性:

levels(x1)<-1:3

> x1
$n1
[1] 1

$n2
[1] 2

$n3
[1] 1 2 3 4 5

attr(,"levels")
[1] 1 2 3

> is.list(x1)
[1] TRUE

> is.vector(x1)
[1] FALSE

它仍然是一个列表,但现在不是矢量

From A brief history of S“S中的基本数据结构是likeelements的向量:数字,字符串或逻辑val UE的。虽然在1988年发布之前,S对象的属性概念没有明确实现, 从一开始,S就认识到数据的主要载体通常伴随着其他值 描述了数据的特殊属性。例如,矩阵只是数据的矢量和辅助 名为Dim的iary向量告诉维度(行数和列数)。同样,一个时间序列 有一个Tsp属性来告诉每个周期的开始时间,结束时间和观察次数。这些载体 带有属性被称为向量结构,这将S与大多数其他系统区分开来。“

据推测它在R中是类似的,它是S的实现,因此这些矢量结构不被指定为向量。