r语言中的class,mode和typeof的区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了r语言中的class,mode和typeof的区别相关的知识,希望对你有一定的参考价值。

参考技术A 首先,mode和typeof可以归为一个类别,class是另外一个类别。mode和typeof描述的是数据在内存中的存储类型;class描述的是对象的类属性(比如马就是一个类,红马或者白马就是子类,张三的白马和李四的红马就是对象,马这个类有什么属性就是类属性,就像颜色,体重等等)
因为历史的原因(更新过好多次,前身是S语言),所以R语言中数据对象的存储类型变化过好多次。mode和storage.mode得到的是一种比较古老的类型,来自于S语言,其中storage.mode比mode要更精确
mode(3L) # numeric
storage.mode(3L) # integer

typeof 是一种最新的查看类型的函数,针对于R语言而非S语言,而且更为精确,更为细致
storage.mode(`identical`) # function
storage.mode(`if`) # function
typeof(`identical`) # closure
typeof(`if`) # special

class和oldClass返回对象的类属性。对于指定类属性的数据对象,class和oldClass的结果是一样的
a=data.frame(1:10)
oldClass(a) # "data.frame"
class(a) # "data.frame"
但是如果没有指定数据对象的类属性,那么oldClass返回NULL,而class会根据数据对象的存储类型(type)与维度属性来自动给出一个类属性
oldClass(3L) # NULL
class(3L) # integer
class(structure(3L, dim=1)) # array
class(structure(3L, dim=c(1,1))) # matrix本回答被提问者和网友采纳

变量的类型和类别

【中文标题】变量的类型和类别【英文标题】:Types and classes of variables 【发布时间】:2011-09-09 14:57:08 【问题描述】:

两个 R 题:

    变量的类型(typeof返回)和类(class返回)有什么区别?区别是否类似于 C++ 语言中的区别? 可能的变量类型和类别有哪些?

【问题讨论】:

此相关帖子也可能提供有用的信息:***.com/questions/8855589/… 【参考方案1】:

在 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 对象的类型

函数 mode 提供有关 Becker, Chambers & Wilks (1988) 意义上的对象模式的信息,并且与 S 语言的其他实现更兼容

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

【讨论】:

“在 R 中,每个“对象”都有一个模式和一个类”,只要从 S4 OOP 类结构的角度来看。在 S3 中,对象可能没有分配类名:oldClass(matrix(1:10, 2,5)) # NULL【参考方案2】:

type 确实指的是 R 中可用的不同数据结构。R Language Definition manual 中的讨论可能会让您开始了解对象和类型。

另一方面,class 在 R 中的含义可能超出您的预期。从 R Language Definition 手册(随您的 R 版本提供):

2.2.4 类

R 有一个复杂的类系统1,主要通过类属性控制。此属性是包含列表的字符向量 对象继承的类。这构成了 R 中“泛型方法”功能的基础。

用户可以不受限制地访问和操作此属性。没有检查对象是否实际包含类方法所期望的组件。因此,更改类属性时应谨慎,当它们可用时,应优先使用特定的创建和强制函数。

【讨论】:

以上是关于r语言中的class,mode和typeof的区别的主要内容,如果未能解决你的问题,请参考以下文章

《R语言实战》自学笔记22-数据整理

c语言中,再对文件的操作模式中,a和a+、w和w+、r和r+有啥区别?

typeof 和 instanceOf的区别

R语言常用函数整理(基础篇)

3. 检查变量和工作区

R语言每次运行结果返回值的个数为啥不同