R 对象的模式、类别和类型

机器算法验证 r
2022-01-15 17:57:29

我想知道 R 对象的模式、类和类型之间有什么区别?R对象的类型可以通过typeof()函数获取,mode通过mode()获取,class通过class()获取。

还有其他我错过的类似功能和概念吗?

谢谢并恭祝安康!

3个回答

class()从 R 中面向对象编程的角度来看,用于定义/识别对象的“类型”。所以对于

> x <- 1:3
> class(x)
[1] "integer"

将使用任何具有“整数”方法的通用函数。

typeof()从 R 的角度mode()给出对象的“类型”,同时从 Becker, Chambers & Wilks (1988) 的角度给出对象的“类型”。根据R 语言定义手册,后者可能与其他 S 实现更兼容。

在大多数情况下,我可能会在使用方面犯错,typeof()除非它是将 R 对象传递给已编译的代码,这storage.mode()将是有用的。

这在上面链接的 R 语言定义中得到了有用的讨论。

来自:https ://www.mail-archive.com/r-help@r-project.org/msg17169.html :

“模式”是根据对象的基本结构对对象进行的互斥分类。“原子”模式是数字、复杂、字符和逻辑。递归对象具有诸如“列表”或“功能”之类的模式或其他一些模式。一个对象只有一种模式。

“类”是分配给对象的属性,用于确定通用函数如何对其进行操作。它不是一个相互排斥的分类。如果一个对象没有分配给它特定的类,例如一个简单的数字向量,按照惯例,它的类通常与其模式相同。

更改对象的模式通常称为“强制”。对象的模式可以改变而不必改变类。

class 和 typeof 的主要区别在于,第一个可以由用户定义,但 type 不能。例如,定义一个列表

> x<-list("a",c(1,2))

> # x is a list
> class(x)
[1] "list"
> # class can be user defined
> class(x)<-"newclass"
> class(x)
[1] "newclass"

> typeof(x)
[1] "list"
# you cannot assign a different type using typeof()
> typeof(x)<-"newclass"
Error in typeof(x) <- "newclass" : could not find function "typeof<-" 

为用户定义的对象赋予特定的类名对于编写程序非常有用。它允许以与面向对象编程语言中发生的方式类似的方式标记用户定义的对象。