2
> 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?我不明白。

4

3 回答 3

3

?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
于 2012-07-22T02:00:32.037 回答
2
> is.atomic(x1)
[1] FALSE

R 语言定义来看,列表是通用向量,但不是原子向量

于 2012-07-22T01:58:40.223 回答
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

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

来自S 的简史“S中的基本数据结构是相似元素的向量:数字、字符串或逻辑值。尽管 S 对象的属性概念直到 1988 年版本才明确实现,从开头的 S 认识到数据的主向量通常伴随着描述数据特殊属性的其他值。例如,矩阵只是一个数据向量以及一个名为 Dim 的辅助向量,它告诉维数(行和列)。类似地,时间序列有一个 Tsp 属性来告诉开始时间、结束时间和每个周期的观察次数。这些具有属性的向量被称为向量结构,这将 S 与大多数其他系统区分开来。

大概它在作为 S 的实现的 R 中是相似的,因此这些向量结构不被指定为向量。

于 2012-07-22T01:57:35.857 回答