第7章 办公

    我们不要欺骗自己了:使用最广的统计软件其实是Excel。

— Brian D. Ripley, September 2002

本课,我们停下学习R函数的匆匆脚步,稍事休整,来让R做一件狗拿耗子的事情:把R当办公软件来用。

一说办公软件,我们首先想到的是微软Office办公三剑客Word,Excel,Powerpoint。这套软件售价不菲,安装还颇受限制,但并不影响对我们多年的吸引力。可惜,我们大部分人平时只用到Office不到10%的功能。即便如此,这10%的功能用起来也并不爽快,而要想使用另外90%的功能,并不比学R语言容易。

其实,我们的R就可以当作办公套件来用,计算数据、写文档、做幻灯片样样拿手。而且,作为办公套件,R用起来更方便、安全、高效;用得久了就会感觉到,这是一种顶级享受。若是跟Office搭配使用,相映成趣,相得益彰。

7.1 从Excel到R代码

在RStudio的界面点击菜单 File – New File – R Script,就会新建一个扩展名为 .r 的文件。我们已经对此很熟悉了,是从第一章以来一直接触的文件形式,相信你到现在已对R丰富的函数有了体会。将来,我们会学到R的扩展包,让我们可以对数据随心所欲地处理,在计算上完全可以取代 Excel,功能上有过之而无不及,在编程上更是让 Excel 望尘莫及。Excel当然也可以用宏命令和 VBA 实现很多强大功能,但门槛比较高。写代码是 R 初级用户上来就会的基本功,但 Excel 用户里会用 VBA 的比例寥寥无几。

思考 7.1 审视一下你平时在Excel做的工作,哪些可以完全移植到R里?哪些只能部分移植?哪些工作R无法胜任?反过来呢?R哪些工作是Excel不能胜任的?

从形式上来说,Excel的输入数据、计算方法、计算结果这三个层面的内容是混合在一起的,这就带来很多不便。比如,有时候我们只想把计算方法分享给同事,但并不想分享原始数据,这在Excel很难办,而R很容易,只把代码分享就行了。数据量大的时候,Excel文件的大小可能达到几百MB,别说发送给别人,就是在本地打开都会非常吃力,有时候说不定会死机,而R的灵活性可以让代码与数据分离,也可以合在一起,Excel的难题在R中迎刃而解。

    有些熟悉R的人把R描述为微软Excel的增强版。

— Ashlee Vance, January 2009

    如果当他是朋友,就别让他用Excel做统计。

— Jonathan D. Cryer, August 2001

7.2 从Word到R文档

我们不仅可以用R来取代Excel,还可以取代Word。

在RStudio的界面点击菜单 File – New File – R Markdown,在对话框选择Document,将默认输出格式勾选Word,填上(也可以不填)文档标题和作者,点OK按钮,一个新文件窗口就打开了。这是个模板,已经填了一些内容,目的是引领我们照葫芦画瓢创建自己的文档。

创建R Markdown文档.

图 7.1: 创建R Markdown文档.

下面,我们把它改成一份自己的文档。前边的11行不用改,从第12行的两个#号开始改:

## 大气颗粒物 pm2.5

pm2.5最近几年在中国是个研究热点。R自带的英国因肺部疾病而死亡的数据显示:

```{r}
summary(fdeaths)
```

## 作图

```{r}
plot(fdeaths)
```

## 其他污染

但是,老师说,跟大气污染相比,其他环境污染问题更紧迫,只是不容易看出来。

- 土壤污染
- 水污染
- 垃圾污染
- 其他

在这篇文档中,##表示后面的文字是二级标题(#越多,标题级别越低);```{r}``` 两行表示两者之间夹着的是R代码;-表示后面是列表格式。这就是标记语言,是把格式用一些字符来表示,而不是通过点鼠标来选择格式。

其实,标记语言在前面的章节已经出现过了。我们在expression()函数里,标明斜体或下标的时候,用的就是标记语言。

现在,把这个文件保存到硬盘里,我们权且起名叫R-sam,再点击工具栏的Knit按钮。立刻,一份图文并茂的Word文档就华丽丽展开在面前了。这个Word文档,就是R生成的。

R创建的Word文档.

图 7.2: R创建的Word文档.

用R来写Word文档有什么好处呢?

应出版社要求,本书起初是用Word写的。然而,在多次修改过程中,需要在R中反复修改示例代码和导出图片,复制粘贴到Word文档中,极易出错,后续还要调整格式。一旦发现代码和图片需要修改,就得重来一次;如此多次,无聊的过程让人心生绝望,最后索性用R来写书,顿时整个世界清静了。

仔细研究一下这份Word文档,你就会更明白我们的意思。如果是在Word里写一模一样的这样一份文档,一般的步骤是这样的:

  1. 写好文字部分;

  2. 用鼠标逐个调格式:文字的颜色,大小,对齐方式,列表格式,代码的字体、颜色、浅灰色背景等等。

  3. 用数据处理软件来计算数据,作图,再把计算结果和画好的图拷贝粘贴进文档。

对比一下RStudio里的这份文档,一步步对应的话,是这样操作的:

  1. 写好文字,同时用一些符号把格式标记出来,格式会自动转换:

  2. 在文字中嵌入R代码,计算结果和作图会自动展示。

这至少意味着两点:

  1. 省却了鼠标调整格式的繁琐步骤;

  2. 不用到别的软件界面拷贝图片了。

在这样的环境里写作,基本上可以避免被其他事情打扰分神,可以保持思维的连贯,只需关注内容,写起来一气呵成。

然而这仅仅是表面的好处。仔细思考,这背后有更丰富的意义。

我们发现,pm2.5的正确写法应该是PM2.5,字母应当大写,数字应当用下标格式。除此之外,我们想把文档里所有的“污染”二字加粗强调。在我们的R-sam里面,由于是标记语言,我们只需按ctrl+f快捷键,查找“pm2.5”,全部替换成PM~2.5~;查找“污染”,全部替换成**污染**就行了。然后,保存文件,再按Knit按钮。Bingo!奇迹就这样发生了。看看生成的Word文档里,格式是不是按我们的心意已经调好了?

波浪线表示下标,双星号表示加粗。这就是标记语言的好处,格式容易批量修改。如果文档里有千百处pm2.5要改,在R的文档里改起来太简单了,而在Word里改起来就是个灾难。就算使用Word的高级查找替换功能,也比R麻烦很多。

这里用的这种标记语言叫做Markdown。有了它,我们书写时只管放心写成pm2.5,将来批量改格式就行了。Markdown的标记方法十分简单,花个几分钟学习,就能满足绝大多数日常需求;如果使用它的扩展语法,那么几乎所有需求都可以得到满足(见附录)。

用R写文档的好处,当然不只是方便改格式。由于R代码是嵌入在文档中的,如果发现计算方法需要补充、修改,那么在这个文档里改就是了,输出的Word文档里数据和图片自动更新,不必考来考去,免去了麻烦的操作,大大减少出错的几率。

而且,跟别人交流时,只需这一份文档,就包含了数据处理过程和结果,别人很容易重复验证,只要有同样的输入数据,就会得到跟你一模一样的结果。这就是“可重复研究报告”的概念。当然,如果你想对计算方法保密,或者对一部分文字保密,只需把文档中的代码设定为隐藏,或者用标记符号将文字隐藏,那么输出的文档里就不会出现代码。总之,这是一份订制性很高、个性十足的文档。关于可重复研究报告,我们将在第14章和第15章进一步介绍。

Example 7.1 将你的学习笔记创建一个R-Markdown文档,并导出为Word文档文档。

此外,这份文档还可以直接生成幻灯片,其中的数据和图片跟Word里保持高度一致。这意味着,我们只维护这一份文档就够了。

那么,如何把这份R-word文档直接变成幻灯片呢?

7.3 从Powerpoint到R幻灯片

在RStudio的界面点击菜单 File - New File - R Markdown,在对话框选择Presentation,将默认输出格式勾选HTML(ioslides),点OK按钮。跟上面一样,新打开的是个用作示例的模板文件。我们把它保存文件到硬盘里某个文件夹,权且起名叫R-slides。点击Knit按钮,一个幻灯片文件就做好了,保存在同一个文件夹下,名叫R-slides.html,是个网页文件。双击打开看看,是不是跟ppt差不多?

如果把我们这个R-slides文档跟上一节R-sam文档比较一下,就会发现,文档的结构完全相同,只有文件开头output后面的内容不同。现在,让我们把R-slides文件开头的output: ioslides_presentation拷贝粘贴到R-word文档里,将原来的output: word_document替换掉,再点Knit按钮,见证一下奇迹的发生。

这份同样内容的Word文档就变成了幻灯片的模样!

这是件激动人心的事情。这意味着,我们以后只需专注这一份R文档就行了。需要Word报告就可以出报告,需要幻灯片就出幻灯片,并且内容都高度一致。

办公世界的纷乱就此平息。

当然,尺有所短,寸有所长,每个软件都有自己的优势。我们暂时无法用R像Excel那样展示绚丽多姿的表格,也无法做出ppt复杂的动画效果。所以,我们没必要厚此薄彼,只需认清他们的长处,为我所用便是了。

事实上,等我们学了第9章之后,这些看似不足的问题也会迎刃而解。我们甚至在将来学会字符和文件操作后,利用循环函数和分支函数,自动批量生成多个Word文档和PPT幻灯片。

思考 7.2 绚丽多姿的表格和复杂的动画效果,真的不能用R实现吗?如果不能,那么这些功能我们真的需要吗?如果能,那么该如何实现?

Example 7.2 将你的学习笔记文档转换成幻灯片。

7.4 课外活动:丰富多彩的幻灯片

做报告(presentation)时使用幻灯片(slides)早已成为标配24 。幻灯片不等于 Powerpoint, 当然也不等于 Keynote。很多软件都可以用来做幻灯片。例如,跟 Powerpoint 最接近的有免费的 WPS 和 Openoffice,模样接近但原理迥异的有 Beamer 和deck.js ,形式和风格大相径庭的有 Prezi 和 ipresst,也有人用思维导图来演示,甚至有人仅用“记事本”就可以把自己的想法说清楚。

对于幻灯片的制作,R 语言有多种解决方案。上网搜搜看,都有哪些有趣的方法,有哪些 具有独特的优势。

不要被困在 Powerpoint 的牢笼里。打开R的窗户,尽是自由天地。   


  1. 当然也有例外,拜罗伊特大学微气象学系答辩要求使用的是打印海报,大气化学系则是要求黑板+粉笔。