两个R问题:
typeof
返回)和类(由class
返回)之间有什么区别?差异是否与C ++语言类似?答案 0 :(得分:94)
在R中,每个“对象”都有mode
和class
。前者表示对象如何存储在内存中(数字,字符,列表和函数),而后者表示其抽象类型。例如:
d <- data.frame(V1=c(1,2))
class(d)
# [1] "data.frame"
mode(d)
# [1] "list"
typeof(d)
# list
正如您所见,数据框作为list
存储在内存中,但它们被包装到data.frame
个对象中。后者允许使用成员函数以及使用自定义行为重载print
等函数。
typeof
(storage.mode
)通常会提供与mode
相同的信息,但并非总是如此。一个很好的例子:
typeof(c(1,2))
# [1] "double"
mode(c(1,2))
# [1] "numeric"
可以找到here之后的原因:
R特定函数 typeof 返回R对象的类型
功能模式提供有关贝克尔,钱伯斯和贝克斯意义上的对象模式的信息。 Wilks(1988),并且与S语言的其他实现更兼容
我上面发布的链接还包含所有原生R basic types
(矢量,列表等)和所有compound objects
(因子和数据框架)的列表以及如何mode
,typeof
和class
与每种类型相关。
答案 1 :(得分:6)
type
实际上是指R中可用的不同数据结构。R Language Definition manual中的讨论可能会让您开始研究对象和类型。
另一方面,class
表示R中的其他内容超出了您的预期。从
R Language Definition手册(随R版本附带):
2.2.4课程
R有一个精心设计的类系统 1 ,主要通过class属性控制。该属性是包含列表的字符向量 对象继承的类。这构成了R。
中“通用方法”功能的基础可以在不受用户限制的情况下虚拟地访问和操作此属性。没有检查对象实际上是否包含类方法所期望的组件。因此,应该谨慎地改变class属性,当它们可用时,应该首选特定的创建和强制函数。