变量的类型和类别

Posted

技术标签:

【中文标题】变量的类型和类别【英文标题】: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 中“泛型方法”功能的基础。

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

【讨论】:

以上是关于变量的类型和类别的主要内容,如果未能解决你的问题,请参考以下文章

变量类型|数据类型|统计特征|

go语言学习笔记 — 基础 — 基本数据类型 — 类型类别:值类型和引用类型

Shell ❀ 基础变量类别与引用

Shell ❀ 基础变量类别与引用

Shell ❀ 基础变量类别与引用

bash脚本变量变量类型