当class($ alpha)返回“numeric”时,为什么summary($ alpha)返回类“-none-”?

时间:2013-11-30 02:15:18

标签: r class

我定义了列表 a &要求第一个元素的类 alpha

a <- list(alpha=c(1,2,3), beta=c("cat","dog","duck"), gamma=factor("a","b","a"))
class(a$alpha)
  

[1]“数字”

然后我要求提供 a 的摘要,其中 alpha 报告类 -none -

summary(a)
      Length Class  Mode     
alpha 3      -none- numeric  
beta  3      -none- character
gamma 1      factor numeric  

问题:(1)为什么会这样? (2)我是R和编程的新手。对于真正想了解R如何工作的初学者(除R language definition之外),您会推荐哪些参考资料?我发现很难理解模式,类和&之间的区别。类型。先感谢您。

1 个答案:

答案 0 :(得分:1)

我并没有声称完全理解为什么,但最好我能说出来,这就是正在发生的事情。

summary.default实际上会调用oldClass而不是class为什么我不确定,虽然我确信这是有充分理由的。

?class中有点隐秘,我们发现以下段落:

  

许多R对象都有一个class属性,一个给出的字符向量   对象继承的类的名称。 如果是对象   没有class属性,它有一个隐式类“matrix”,   “array”或mode(x)的结果(整数向量除外)   隐式类“整数”)。(函数oldClass和oldClass&lt; - get和   设置属性,也可以直接完成。)

所以这里发生的是class返回隐式类(数字)。请注意,attr(a$alpha,"class")会返回NULL。由于该属性不存在,oldClass忠实地返回NULL

至于模式,类型和类之间的差异,前两个是相关的,第三个是一个单独的想法。模式和类型(我认为)在文档中实际上已经很好地解释了。 mode告诉您对象的存储模式,但它依赖于typeof的结果,因此它们(大多数)是相同的。或者至少连接起来。但typeof返回的不同值只是简化为较小的子集。