2011-06-06 96 views
74

2个R问题:类型和变量的类

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

本文相关文章也可能提供有用的信息:http://stackoverflow.com/questions/8855589/a-comprehensive-survey-of-the-types-of-things-in-r-mode-and-class-和式 – 2015-07-30 03:33:23

回答

87

在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对象

功能的类型模式给出信息关于Becker意义上的对象的模式,Chambers & Wilks(1988),并且与S语言的其他实现更兼容

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

4

type真的是指R.提供的不同的数据结构在R Language Definition manual这个讨论可以让你开始对象和类型。

另一方面,class意味着R中的其他内容比您预期的还要多。从 的R Language Definition手册(与您的R版本出来):

2.2.4类

R有一个复杂的等级制度,通过class属性主要控制。该属性是包含对象继承的类的列表 的字符向量。这构成了R中的“通用方法”功能的基础。

该属性可以被虚拟访问和操纵,而不受用户的限制。没有检查一个对象实际上是否包含类方法期望的组件。因此,应该谨慎地改变类属性,当它们可用时,特定的创建和强制功能应该是优选的。