0 Comments

R中的类和方法(1)

发布于:2013-03-09  |   作者:广州网站建设  |   已聚集:人围观

        在第1章中,我们将R作为一门语言和用于数据分析的环境进行了介绍。尽管这里不是展开介绍R的地方(非常有用的"R的介绍"(Venables et al.,2008)免费文档可以从CRAN下载),强调一下它的特性还是非常有用的(也可以参考Braun and Murdoch, 2007)。本书中,我们将在文本中引用R命令,说明用户能发出什么命令,非图形化的输出如何打印到控制台显示。广州网站建设

当然,R能用作一个计算器执行简单的任务,这个任务里没有值赋给变量,并且结果显示后不会保存。比如,计算一个半径为10的圆的面积:


  1. >  pi * 10^2  
  2. [1]  314.1593 

 

        π是R内置的一个常量,称作pi,因此我们不必赋值。所以这看起来像一个计算器,但是表面上让人误解。第一个错误的印象是完成算术运算十分简单,而事实上,算术运算首先被解析为带参数的函数(运算符),然后再计算值:

  1. > "*"(pi, "^"(10, 2))  
  2. [1] 314.1593 

 

       操作符或函数允许,可以像使用标量值(实际上它们是单元向量)一样使用向量,下面的:"操作符可以生成一个整数值序列:

  1. > pi * (1:10)^2  
  2.  
  3. [1] 3.141593 12.566371 28.274334 50.265482 78.539816 113.097336  
  4. [7] 153.938040 201.061930 254.469005 314.159265  

 

       二个误解是将适当的print方法用于类的结果时,使用默认参数,输出到控制台的内容才是结果。如果使用赋值操作符<-将圆的面积作为返回值存储于变量x时,能用默认数据格式打印x,当然也可以在命令提示符处输入变量名即可调用合适的打印方法,也可以显式将其传递给print方法:
广州网站建设
  1. > x <- pi * 10^2  
  2. > x  
  3.  
  4. [1] 314.1593  
  5.  
  6. > print(x)  
  7.  
  8. [1] 314.1593  
  9.  
  10. > print(x, digits = 12)  
  11.  
  12. [1] 314.159265359  

 

      我们也可以假设变量x包含一个类的实例,如下所示:

  1. > class(x)  
  2.  
  3. [1] "numeric"  
  4.  
  5. > typeof(x)  
  6.  
  7. [1] "double"  

         这里,typeof 运算符返回对象在变量x中的存储模式。方法由对象的类来决定并用于处理对象。如果这个类没有特定的方法,它将会传到一个默认的方法。这些方法也被称为通用的函数,至少包括print、plot和summary方法。以print方法为例,numeric并没有显式提供,所以使用默认方法。plot方法,顾名思义,将使用当前的图形设备进行对象的可视化显示,如果提供对象的类,将分配给一个特定的方法。与print方法相比,summary方法提供了一个合格的数据视图,并且突出显示对象的关键特性。

         当S语言最初问世时,它完全没有引入类/方法机制。这种机制在Chambers and Hastie(1992)和S第3版时引入,它采用S3类或老式的类,这些类没有正式定义,是新增加的,绝大多数由模型拟合函数返回的对象都是旧式类。使用来自标准数据集cars的非空间例子,我们能够发现它是data.frame类的一个对象,存储在一个list中,list是一个向量,它的成份可以包含任意对象。data.frame类有name和summary方法:


  1. > class(cars)  
  2.  
  3. [1] "data.frame"  
  4.  
  5. > typeof(cars)  
  6.  
  7. [1] "list"  
  8.  
  9. > names(cars)  
  10.  
  11. [1] "speed" "dist"  
  12.  
  13. > summary(cars)  
  14.  
  15.      speed          dist  
  16. Min.    :4.0 Min.     : 2.00  
  17. 1st Qu. :12.0 1st Qu.: 26.00  
  18. Median  :15.0 Median : 36.00  
  19. Mean    :15.4 Mean    : 42.98  
  20. 3rd Qu. :19.0 3rd Qu.: 56.00  
  21. Max.    :25.0 Max.    :120.00  
飞机