【发布时间】:2012-07-22 01:39:52
【问题描述】:
> x=c(1,2,3,4,5)
> x1=list(n1=1,n2=2,n3=x)
> is.vector(x1)
[1] 正确
> is.list(x1)
[1] 正确
为什么 is.vector(x1)=true?我不明白。
【问题讨论】:
标签: r
> x=c(1,2,3,4,5)
> x1=list(n1=1,n2=2,n3=x)
> is.vector(x1)
[1] 正确
> is.list(x1)
[1] 正确
为什么 is.vector(x1)=true?我不明白。
【问题讨论】:
标签: r
来自?is.vector
如果 mode = "any",is.vector 可能会为原子模式、列表和表达式返回 TRUE。
如果您不希望 is.vector 返回 TRUE 以获得 list,则可以指定 mode
> is.vector(x1, mode='numeric')
[1] FALSE
> is.vector(x, mode='numeric')
[1] TRUE
【讨论】:
> is.atomic(x1)
[1] FALSE
在R language definition 中,列表是通用向量,而不是原子向量。
【讨论】:
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
它仍然是一个列表,但现在不是一个向量
来自A brief history of S "S 中的基本数据结构是相似元素的向量:数字、字符串或逻辑值 使用。尽管 S 对象的属性概念直到 1988 年才明确实现, 从一开始,S 就认识到数据的主要向量通常伴随着其他值 描述了数据的特殊属性。例如,矩阵只是一个数据向量和一个辅助 名为 Dim 的二元向量,它告诉维度(行数和列数)。同样,时间序列 有一个 Tsp 属性来告诉每个周期的开始时间、结束时间和观察次数。这些载体 带有属性的结构被称为向量结构,这将 S 与大多数其他系统区分开来。”
大概它在 R 中是相似的,它是 S 的一个实现,所以这些向量结构不被指定为向量。
【讨论】: