奇怪的对象 - 矢量或列表?

时间:2017-05-26 08:43:16

标签: r

a<-c(AA=4.7,BB=2,CC=7.5)
typeof(a) #double

对象是什么&#34; a&#34;?这是数字向量,字符串向量还是列表?

4 个答案:

答案 0 :(得分:1)

使用以下功能检查班级,模式,类型等。在你的情况下:

class(a)
[1] "numeric"

mode(a)
[1] "numeric"

typeof(a)
[1] "double"

is.atomic(a)
[1] TRUE

is.list(a)
[1] FALSE

从官方R帮助页面:

  

R是一个历史异常,它的浮点有两个名字   向量,双重和数字(以前有真实的)。

     

double是该类型的名称。 numeric是模式的名称和   也是隐含的类。

有关更多信息,请在控制台中键入help("double")

答案 1 :(得分:1)

我认为您对atomic vector / vectorlists感到困惑。我认为@nicola正确地指出了评论中的向量。在R中,当我们说向量时,它实际上意味着它是原子向量还是列表。您可以通过检查它们的3个属性即类型,长度和属性来确定它们。

因此,要检查对象是否为向量,您必须检查:is.atomic(x) || is.list(x)。当然在你的情况下它是正确的。这表明它是原子类型的载体。

除此之外,原子向量还主要分为整数,逻辑,双(数字)和字符。

如果要确定特定类型(如整数,逻辑等),请使用typeof()

现在还有两件事你可以检查classmode

class()用于从面向对象编程的角度来识别对象的“类型”,你会发现class有时是type的超集。例如在你的情况下,“a”基本上是类numeric下的“double”类型对象。

mode()从作者的角度给出了对象的“类型”。

现在回答你的问题:

对象“a”在类numeric中是double类型。您可以通过在控制台上运行typeof(a)和class(a)来检查它。

r中还有另一个名为storage.mode的内容,来自?storage.mode的文档:

  

mode和storage.mode都返回一个给出的字符串   对象的(存储)模式 - 通常是相同的 - 都依赖于   typeof(x)的输出

请阅读Hadley Wickham的“Advanced R”,我学到的大部分内容仅来自那本书。链接是here。您可能还想查找R Language Definition

注意:我希望我清楚自己想传达的内容。如果有人发现我的理解有任何错误,请告诉我。但据我所知,我几乎可以肯定这是在R中查找对象的方式。

答案 2 :(得分:1)

基本上,你有一个命名向量,它仍然是一个数字向量。您不希望数据帧的列成为字符,因为它的名称是字符串。这里也是如此。

要清楚,请尝试

names(a)
unname(a)

答案 3 :(得分:0)

您可以通过以下方式查看:

class(a)

您使用的代码用于创建向量,然后代码class(a)应该说a是向量。