2012-07-23 45 views
1

可能重复:
why the object is vector?为什么list()返回一个向量,而不是一个列表?

请看看我的代码:

> x=function(z){z+1} 
> y=list(n1=1,n2="qwe",n3=TRUE,n4=x) 
> is.vector(y) 

[1] TRUE 

为什么y载体? n1是数字,n2是字符,n3是逻辑的,n4是一个函数。

他们是不同的,那么为什么y是一个向量?当然y只能是一个列表?

> data 
name sex age height 
1 x1 F 18 162 
2 x2 M 19 170 
3 x3 M 21 178 
4 x4 F 22 166 
5 x5 F 23 165 
> data[1,] 
name sex age height 
1 x1 F 18 162 
> is.vector(data[1,]) 
[1] FALSE 

我很困惑向量,为什么这里的数据[1,]不能是一个vectort?

+4

你能告诉我们你为什么要问“矢量”这么多问题?我写了成千上万行R代码,我不记得曾经测试过is.vector(something)。 – Spacedman 2012-07-23 13:25:59

+0

我无法理解概念向量及其用法。 – 2012-07-23 14:00:36

回答

10

您正在使用的list其中创建了通用向量。列表可以包含不同类型的对象,并且它们本身是矢量

因此is.vector给出了正确的答案。有关更多信息,请参阅here

而且如果键入fix(y)你会看到结构:

structure(
list(
    n1 = 1, 
    n2 = "qwe", 
    n3 = TRUE, 
    n4 = function(z){z+1} 
), 
.Names = c("n1", "n2", "n3", "n4") 
) 
4

y列表:

> is.list(y) 
[1] TRUE 

你困惑是因为名单是矢量,它是在描述?is.vector的详细信息部分的第二段。同一句话说:is.vector也将返回TRUE的表达式:

> is.vector(as.expression(y)) 
[1] TRUE 
相关问题