> 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?我无法理解。
答案 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的实现,因此这些矢量结构不被指定为向量。