我定义了列表 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之外),您会推荐哪些参考资料?我发现很难理解模式,类和&之间的区别。类型。先感谢您。
答案 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
返回的不同值只是简化为较小的子集。