变量的类型和类别
类型和变量的类别是R语言中的两个重要概念。在R语言中,type
指的是不同的数据结构,而class
则是指对象的类别。
在R语言中,类型和变量的类别的概念在R语言定义手册中有详细的说明。在该手册中,可以找到关于对象和类型的介绍。
然而,在R语言中,class
的含义与人们的预期不同。根据R语言定义手册的描述,R语言拥有一个复杂的类系统,主要通过类属性来控制。类属性是一个包含对象继承的类列表的字符向量。这构成了R语言中“通用方法”功能的基础。
用户几乎可以无限制地访问和操作这个属性。R语言不会检查对象是否实际包含了类方法所需的组件。因此,改变类属性时应当谨慎处理,并且在可能的情况下应该优先使用特定的创建和转换函数。
因此,要正确理解和使用R语言中的类型和变量的类别概念,需要仔细阅读R语言定义手册中的相关内容,并注意在操作类属性时的注意事项。
解决方法是仔细阅读R语言定义手册中关于类型和变量类别的说明,并在操作类属性时谨慎处理。在可能的情况下,应该优先使用特定的创建和转换函数来改变类属性。
在R中,每个"对象"都有一个mode和一个class。前者表示对象在内存中的存储方式(numeric、character、list和function),而后者表示其抽象类型。例如:
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"
这个现象的原因可以在这里找到:
The R specific function typeof returns the type of an R object
Function mode gives information about the mode of an object in the sense of Becker, Chambers & Wilks (1988), and is more compatible with other implementations of the S language
我在上面发布的链接还包含了所有本地R基本类型(向量、列表等)和所有复合对象(因子和数据框)的列表,以及每种类型的mode、typeof和class之间的关系的一些示例。
只要从S4 OOP类结构的角度来看,"在R中,每个"对象"都有一个mode和一个class"。在S3中,对象可能没有分配的类名:oldClass(matrix(1:10, 2,5)) # NULL