变量的类型和类别

15 浏览
0 Comments

变量的类型和类别

两个R语言问题:

  1. 变量的类型(由typeof返回)和类(由class返回)之间有什么区别?这个区别是否类似于C++语言中的区别?
  2. 变量可能的类型和类有哪些?
0
0 Comments

类型和变量的类别是R语言中的两个重要概念。在R语言中,type指的是不同的数据结构,而class则是指对象的类别。

在R语言中,类型和变量的类别的概念在R语言定义手册中有详细的说明。在该手册中,可以找到关于对象和类型的介绍。

然而,在R语言中,class的含义与人们的预期不同。根据R语言定义手册的描述,R语言拥有一个复杂的类系统,主要通过类属性来控制。类属性是一个包含对象继承的类列表的字符向量。这构成了R语言中“通用方法”功能的基础。

用户几乎可以无限制地访问和操作这个属性。R语言不会检查对象是否实际包含了类方法所需的组件。因此,改变类属性时应当谨慎处理,并且在可能的情况下应该优先使用特定的创建和转换函数。

因此,要正确理解和使用R语言中的类型和变量的类别概念,需要仔细阅读R语言定义手册中的相关内容,并注意在操作类属性时的注意事项。

解决方法是仔细阅读R语言定义手册中关于类型和变量类别的说明,并在操作类属性时谨慎处理。在可能的情况下,应该优先使用特定的创建和转换函数来改变类属性。

0
0 Comments

在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

0