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
的一些示例, typeof
和 class
与每种类型相关。
【讨论】:
“在 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的区别的主要内容,如果未能解决你的问题,请参考以下文章