> 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?我不明白。
> 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?我不明白。
从?is.vector
如果 mode = "any",is.vector 可能为原子模式、列表和表达式返回 TRUE。
mode
如果您不想is.vector
退货TRUE
,您可以指定list
> is.vector(x1, mode='numeric')
[1] FALSE
> is.vector(x, mode='numeric')
[1] TRUE
> is.atomic(x1)
[1] FALSE
从R 语言定义来看,列表是通用向量,但不是原子向量。
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
它仍然是一个列表,但现在不是向量
来自S 的简史“S中的基本数据结构是相似元素的向量:数字、字符串或逻辑值。尽管 S 对象的属性概念直到 1988 年版本才明确实现,从开头的 S 认识到数据的主向量通常伴随着描述数据特殊属性的其他值。例如,矩阵只是一个数据向量以及一个名为 Dim 的辅助向量,它告诉维数(行和列)。类似地,时间序列有一个 Tsp 属性来告诉开始时间、结束时间和每个周期的观察次数。这些具有属性的向量被称为向量结构,这将 S 与大多数其他系统区分开来。
大概它在作为 S 的实现的 R 中是相似的,因此这些向量结构不被指定为向量。