变量的类型和类别


Answers:


96

在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具有自定义行为)。

typeofstorage.mode)通常会提供与mode但并非总是相同的信息。例子:

typeof(c(1,2))
# [1] "double"
mode(c(1,2))
# [1] "numeric"

背后的原因可以在这里找到:

R特定函数typeof返回R对象的类型

功能模式以Becker,Chambers和Wilks(1988)的意义提供有关对象模式的信息,并且与S语言的其他实现更兼容

我在上面发布的链接还包含所有本机R basic types(向量,列表等)和所有compound objects(因子和data.frames)的列表,以及有关如何与modetypeofclass每种类型相关的一些示例。


1
只要从S4 OOP类结构的角度来看,“在R中,每个“对象”都有一个模式和一个类”。在S3中,对象可能未分配类别名称:oldClass(matrix(1:10, 2,5)) # NULL
Erdogan CEVHER

6

type实际上是指R中可用的不同数据结构。R语言定义手册中的此讨论 可能使您开始研究对象和类型。

另一方面,classR中的其他含义可能超出您的预期。从R语言定义手册(R版本随附)中:

2.2.4类

R具有精心设计的类系统1,该类系统主要通过class属性进行控制。此属性是一个字符向量,其中包含对象继承的类的列表。这构成了R中“通用方法”功能的基础。

几乎可以不受用户限制地访问和操纵此属性。没有检查对象是否真正包含类方法期望的组件。因此,应谨慎地更改class属性,并且当它们可用时,应首选特定的创建和强制功能。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.