且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

《R语言编程艺术》——1.2 第一个R会话

更新时间:2022-09-26 15:24:25

1.2 第一个R会话

用数字1、2、4生成一个简单的数据集(用R的说法就是“向量”),将其命名为x:

《R语言编程艺术》——1.2 第一个R会话

R语言的标准赋值运算符是<-。也可以用=,不过并不建议用它,因为在有些特殊的情况下它会失灵。注意,变量的类型并不是固定不变的。在这里,我们把一个向量赋值给x,也许之后会把其他类型的值赋给它。我们会在1.4节介绍向量和其他类型。
c表示“连接”(英文是concatenate)。在这里,我们把数字1、2、4连接起来。更精确地说,连接的是分别包含三个数字的三个一元向量。这是因为可以把任何数字看作一元向量。
接下来我们也可以这样做:

《R语言编程艺术》——1.2 第一个R会话

这样就把q赋值为(1,2,4,1,2,4,8)(没错,还包括了x的副本)。
我们来确认一下数据是不是真的在x中。要在屏幕上打印向量,只需直接键入它的名称。如果你在交互模式下键入某个变量名(或更一般的,某个表达式),R就会打印出变量的值(或表达式的值)。熟悉其他语言(比如Python)的程序员会觉得这个特性很熟悉。例如,输入下面的命令:
《R语言编程艺术》——1.2 第一个R会话

果然,x包含数字1、2、4。
向量的个别元素靠[ ]来访问。下面来看看如何打印x的第三个元素:
《R语言编程艺术》——1.2 第一个R会话

正如在其他语言里一样,称选择器(这里的3)为索引(index)或者下标(subscript)。这些概念与ALGOL家族的语言(比如C和C++)类似。值得注意的是,R向量的元素的索引(下标)是从1开始的,而非0。
提取子集是向量的一个非常重要的运算。下面是个例子:
《R语言编程艺术》——1.2 第一个R会话

表达式x[2:3]代表由x的第2个至第3个元素组成的子向量,在这里也就是2和4组成的子向量。
可以很容易求得本例中数据集的均值和标准差,如下:
《R语言编程艺术》——1.2 第一个R会话

这里再次展示了在命令提示符下键入表达式来打印表达式的值。在第一行,表达式调用的是函数mean(x)。函数的返回值会自动打印出来,而不需要调用R的print()函数。
如果想把求得的均值保存在变量里,而不是打印在屏幕上,可以执行下面的代码:
《R语言编程艺术》——1.2 第一个R会话

注释对于写有程序代码的文档是很有价值的,不过在交互式会话中注释也很有用,因为R会记录命令历史(1.6节会讨论这一点)。如果你保存了会话,之后又恢复会话,注释可以帮你回忆起当时在做什么。
最后,我们从R的内置数据集(这些数据集是用来做演示的)里取出一个做些操作。你可以用下面的命令得出一份这些数据集的列表:
《R语言编程艺术》——1.2 第一个R会话

其中一个数据集名为Nile,包含尼罗河水流量的数据。我们来计算这个数据集的均值和标准差:

《R语言编程艺术》——1.2 第一个R会话

此时会弹出一个包含直方图的窗口,如图1-1所示。这幅图是极其简单的,不过R有各种可选的变量来修饰图形。例如,可以通过设定breaks变量来改变分组;调用hist(z,breaks=12)可以画出数据集z的带有12个分组的直方图;还可以创建更漂亮的标签、改变颜色,以及其他一些改变来创建更有信息量且吸引眼球的图形。当你更熟悉R之后,就有能力构建更复杂、绚丽多彩的精美图形。

《R语言编程艺术》——1.2 第一个R会话

最后调用q()函数以退出R(另一种方法是,在Linux中按下快捷键CTRL-D,或者在Mac中按下CMD-D):

《R语言编程艺术》——1.2 第一个R会话

最后一句提示是询问你是否希望保存变量以待下次运行时继续处理。如果回答y,则所有对象将会在下次启动R的时候自动加载。这是非常重要的特性,特别是在处理庞大的数据集或很多数据集时。回答y也会保存会话的命令历史。1.6节会继续介绍如何保存工作空间(workspace)和命令历史。