变量的类型和类

时间:2011-06-06 21:03:55

标签: class r types

两个R问题:

  1. 变量的类型(由typeof返回)和类(由class返回)之间有什么区别?差异是否与C ++语言类似?
  2. 变量的可能类型和类别是什么?

2 个答案:

答案 0 :(得分:94)

在R中,每个“对象”都有modeclass。前者表示对象如何存储在内存中(数字,字符,列表和函数),而后者表示其抽象类型。例如:

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"

可以找到here之后的原因:

  

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

     

功能模式提供有关贝克尔,钱伯斯和贝克斯意义上的对象模式的信息。 Wilks(1988),并且与S语言的其他实现更兼容

我上面发布的链接还包含所有原生R basic types(矢量,列表等)和所有compound objects(因子和数据框架)的列表以及如何modetypeofclass与每种类型相关。

答案 1 :(得分:6)

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

另一方面,class表示R中的其他内容超出了您的预期。从 R Language Definition手册(随R版本附带):

  

2.2.4课程

     

R有一个精心设计的类系统 1 ,主要通过class属性控制。该属性是包含列表的字符向量   对象继承的类。这构成了R。

中“通用方法”功能的基础      

可以在不受用户限制的情况下虚拟地访问和操作此属性。没有检查对象实际上是否包含类方法所期望的组件。因此,应该谨慎地改变class属性,当它们可用时,应该首选特定的创建和强制函数。