R语言入门与实践
上QQ阅读APP看书,第一时间看更新

1.1 R的用户界面

在让计算机保存这些数字之前,你需要了解如何与计算机对话。R和RStudio正是与计算机进行对话的两个工具。严格来说,RStudio是话筒,而R则是沟通所用的语言。不妨现在就打开RStudio吧,其打开方式与打开其他程序无异,双击程序图标即可。打开之后,你的屏幕上应该出现类似图1-1的窗口。

图1-1:在控制台面板最下面一行的提示符后键入R命令,计算机就会执行该命令。在键入命令之后,别忘记按回车键。如果你是第一次打开RStudio,控制台会出现在面板的左侧。你可以通过更改设置将它放在你觉得舒服的位置,更改方法是在RStudio菜单栏中依次点击File(文件)> Preferences(偏好设置),然后进行相应的设置即可

如果你的计算机中还没有安装R和RStudio,或者你完全看不懂我在说些什么,请先阅读附录A。该附录简要介绍了这两个免费工具,并且提供了下载和安装它们的方法。

RStudio的用户界面十分简洁。要想运行一段R程序,只需在RStudio控制台面板最下面一行内键入R代码,然后按回车键即可。键入的代码通常称作命令(command),因为它会命令计算机按照指示完成任务。键入代码所在的行称作命令行(command line)。

当你在控制台的提示符处键入命令并按回车键之后,计算机会执行该命令并显示结果。在一段程序运行结束之后,RStudio会自动换行并显示一个新的提示符,等待你键入下一个命令。比如,当你键入1 + 1并按回车键之后,RStudio将显示如下结果。

        > 1 + 1
        [1] 2
        >

程序的运行结果是2,但你应该已经注意到了2之前的[1]。R这样做是在提醒你2是输出结果的第一个值。有些命令会返回多个值,R可能需要用多行来显示,并且用中括号内嵌数字来标示每一行的起始数值在整个返回结果中的序号。举例来说,如果你键入的命令是100:130,那么R将返回31个值,因为该命令生成了100到130之间的所有整数。第二行的起始标识是[14],表示第二行的第一个数值是所有返回值中的第14个值;第三行的起始标识是[27],代表第三行的第一个数值在所有返回值中的序号为27。中括号内的数值基本可以忽略不看。

        > 100:130 ➊
         [1] 100101102103104105106107108109110111112
        [14] 113114115116117118119120121122123124125
        [27] 126127128129130

➊ 命令行中的冒号运算符(:)表示返回两个整数值之间的所有整数,它是生成一个数字序列的快捷方法。

R不是一种语言吗?

你可能觉得我称呼R的方式更像是在称呼一个人,比如我会说“让R做这件事”或者“让R做那件事”。当然,R并不能真正去做这些事,它只是一种语言而已。刚才的说法只是一种简化的命令描述,其完整的说法应该是:“在RStudio控制台中利用R语言编写一个命令,并让计算机执行该命令。”真正去执行这个任务的是计算机,而不是R。

这样的简化描述会让人感觉颇为困惑并显得我们有点懒惰?没错!但是,是否很多人都这样描述?据我所知,基本上所有人都这样描述R,因为这样省了很多麻烦。

何时编译?

在某些编程语言中,比如C、Java和Fortran,要想让程序运行,你需要将你编写的人类易读程序编译为机器可以理解的语言(大多数都是由1和0构成的)。如果你用过这样的语言编程,那么此时你可能会有这样的疑问:我需要将编写的R代码编译之后再运行吗?答案是:不需要。R是一种动态编程语言,这就意味着在你运行R代码时,编译操作会由R自动完成。

如果你键入一段不完整的命令并按回车键,R就会显示一个+提示符,代表R在等待你键入接下来的命令。你可以选择键入剩下的命令或者按Esc键重新键入。

        > 5-
        +
        + 1
        [1] 4

如果你键入了一段R不能识别的命令,R会返回报错信息。当R报错时,你大可不必惊慌,因为它只是在告诉你计算机无法理解或执行你所键入的命令。你可以在下一个提示符之后尝试键入一段不同的命令,如下所示。

        >3 % 5
        Error: unexpected input in "3 % 5"
        >

当你熟悉了R的命令行之后,会发现它是一个十分好用的计算器。比如说,你可以用命令行执行基本的算术运算。

        2 * 3
        ## 6

        4-1
        ## 3

        6 / (4-1)
        ## 2

注意到上方代码有何不寻常之处了吗?我省去了>和[1]这样的符号,这样就方便大家将这些代码复制粘贴到自己的R控制台中,直接运行。

在R语言中,字符#是比较特别的。如果某一行以#开头,那么该行之后的所有内容都不会被当作R命令运行。也就是说,我们可以在#后面加入与程序相关的注释和注解。计算机在执行R代码时会忽视这些以#开头的命令行,但是它们有助于提高程序本身的可读性。在R中,#被称作注释符号(commenting symbol)。

在本书接下来的部分,我会使用#标记R的输出结果。一个#代表我添加的程序注释,两个#代表其后是程序的执行结果。我会尽量避免本书的程序结果中出现>提示符和类似

[1]这样的行标记,除非我希望你看到它们。

取消命令

一些R程序可能需要很长时间才能运行完毕。如果想临时中止程序的运行,可以键入ctrl + c。但需要注意的是,很可能中止操作也需要花很长的时间。

练习

刚刚展示的就是RStudio中运行R程序的基本界面。想必你已经基本了解了它的操作方式。可以用下面的简单练习检验一下自己是否真的掌握了这个基本界面。如果下面的每一步都运行无误的话,最后得到的结果应该跟你最先输入的数字一模一样。

(1)随意选一个数字,并加2。

(2)再乘以3。

(3)再减去6。

(4)最后再除以3。

在本书中,所有的练习题都会被放在如上所示的方框中。针对每一个练习,随后都会给出答案。下面就是上题的答案。

假设你选择的数字是10,那么每一步的结果应该如下所示。

        10 + 2
        ## 12

        12 * 3
        ## 36

        36-6
        ## 30

        30 / 3
        ## 10

现在你已经知道如何使用R的基本界面了,接下来让我们一起做一个虚拟的骰子。之前提到过的:运算符可以方便地用来生成从1到6的一组整数。:运算符的返回值是一个向量,也就是一个一维数组。

        1:6
        ## 1 2 3 4 5 6

这六个数就是一个骰子所包含的全部信息了!但是工作还没有完成,因为运行1:6只是生成了一串我们可以看到的数字而已,并没有把这串数字保存到计算机内存里。我们现在看到的六个数字其实相当于它们在显示屏上留下的脚印,它们曾短暂存在过。如果你想多次使用这六个数字,就需要让计算机把它们保存起来。这样的保存操作在R中叫作创建一个R对象(object)。