在第1章中,我们将R作为一门语言和用于数据分析的环境进行了介绍。尽管这里不是展开介绍R的地方(非常有用的"R的介绍"(Venables et al.,2008)免费文档可以从CRAN下载),强调一下它的特性还是非常有用的(也可以参考Braun and Murdoch, 2007)。本书中,我们将在文本中引用R命令,说明用户能发出什么命令,非图形化的输出如何打印到控制台显示。广州网站建设
当然,R能用作一个计算器执行简单的任务,这个任务里没有值赋给变量,并且结果显示后不会保存。比如,计算一个半径为10的圆的面积:
- > pi * 10^2
- [1] 314.1593
π是R内置的一个常量,称作pi,因此我们不必赋值。所以这看起来像一个计算器,但是表面上让人误解。第一个错误的印象是完成算术运算十分简单,而事实上,算术运算首先被解析为带参数的函数(运算符),然后再计算值:
- > "*"(pi, "^"(10, 2))
- [1] 314.1593
操作符或函数允许,可以像使用标量值(实际上它们是单元向量)一样使用向量,下面的:"操作符可以生成一个整数值序列:
- > pi * (1:10)^2
- [1] 3.141593 12.566371 28.274334 50.265482 78.539816 113.097336
- [7] 153.938040 201.061930 254.469005 314.159265
二个误解是将适当的print方法用于类的结果时,使用默认参数,输出到控制台的内容才是结果。如果使用赋值操作符<-将圆的面积作为返回值存储于变量x时,能用默认数据格式打印x,当然也可以在命令提示符处输入变量名即可调用合适的打印方法,也可以显式将其传递给print方法:
广州网站建设
- > x <- pi * 10^2
- > x
- [1] 314.1593
- > print(x)
- [1] 314.1593
- > print(x, digits = 12)
- [1] 314.159265359
我们也可以假设变量x包含一个类的实例,如下所示:
- > class(x)
- [1] "numeric"
- > typeof(x)
- [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方法:
- > class(cars)
- [1] "data.frame"
- > typeof(cars)
- [1] "list"
- > names(cars)
- [1] "speed" "dist"
- > summary(cars)
- speed dist
- Min. :4.0 Min. : 2.00
- 1st Qu. :12.0 1st Qu.: 26.00
- Median :15.0 Median : 36.00
- Mean :15.4 Mean : 42.98
- 3rd Qu. :19.0 3rd Qu.: 56.00
- Max. :25.0 Max. :120.00



