6 脚本与项目
本章介绍用于组织代码的两个基本要素:脚本、项目。
##脚本
当工作变得更加复杂时,只用控制台运行代码显得力不从心,此时可使用脚本。在 RStudio 中,点击“文件”菜单,选择新建 R 脚本即可出现空白脚本。此时共有四个窗口,如图所示。

6.0.0.0.1 6.1.1 运行代码
脚本编辑器是构建复杂ggplot图或长管道的最佳位置。
快捷键如下:
Ctrl + Enter,在控制台执行当前一行代码。
Ctrl + Shift + S,一步执行完整脚本。
建议使用library(所需的包)作为脚本开头。这样,如果要共享代码,可以让他人知晓需要安装的软件包。但绝不应包含在共享脚本中加install.packages("包"),不太厚道。
6.0.1 RStudio 诊断
在脚本编辑器中,RStudio 将在左侧边栏中用红色波浪线和叉号突出显示语法错误(前提是脚本已被创建并保存):

将鼠标悬停在红叉上以查看问题:

RStudio 还会通过警示符标注潜在问题:

6.0.2 保存与命名
RStudio 会在退出时自动保存脚本编辑器的内容,并在重新打开时自动重新加载它。尽管如此贴心,但还是建议自己保存并命名。
命名有以下原则:
- 文件名应该是机器可读的:避免使用空格、特殊字符。不要依赖区分大小写来区分文件。
- 文件名应该是人类可读的:可使用文件名来描述文件内容。
- 可让系列文件名以字母或数字顺序开头,以便按实际使用顺序排列它们。
以下举例。请看一个奇葩文件夹中的各文件名:
alternative model.R #有空格
code for exploratory analysis.r #有空格且繁杂
finalreport.qmd
FinalReport.qmd #妄图通过大小写区分文件
fig 1.png #有空格
Figure_02.png #与上面fig1格式不统一
model_first_try.R
run-first.r #没描述内容
temp.txt #没描述内容修改名称后如下:
01-load-data.R
02-exploratory-analysis.R
03-model-approach-1.R
04-model-approach-2.R
fig-01.png
fig-02.png
report-2022-03-20.qmd
report-2022-04-02.qmd
report-draft-notes.txt
6.1 项目
有时我们需要暂时退出 R,稍后再返回分析;有时我们需要将外部数据导入 R,处理后再对外反馈。
要处理这两种情况,需要认清两个问题:
- 真理的源头是什么?或者说什么文件能够永久记录我们曾做过的工作?
- 我们所做的分析位于何处?
6.1.1 真理的源头
作为初学者,可以依靠当前 R 环境来保留在整个分析过程中创建的所有对象。但是为了更轻松地处理大型项目或与他人协作,真理的源头应该是 R 脚本。
使用 R 脚本(和数据文件),我们才能重新创建环境。相反,仅使用当前环境,重新创建 R 脚本则要困难得多,要么必须从内存中重新键入大量代码(在此过程中不可避免地会犯错误),要么必须仔细挖掘 R 历史记录。
为了保证让 R 脚本成为一切事实的根据,强烈建议设置不要在 RStudio 会话之间保留工作区。即做到两点:
- 取消勾选
RData into workspace - 设置
Save workspace to .RData on exit:为Never
如下图所示即可:

或许这会带来一些短期的不便,因为现在重新启动 RStudio 时,它将不再记住上次运行的代码,所创建的对象或读取的数据集也将无影无踪。
但是短期的不便可以省去长期的痛苦,它会迫使我们在代码中专注于所有重要的过程。
书中在此推荐两个快捷键:
- 按 Cmd/Ctrl + Shift + 0/F10 重新启动 R。
- 按 Cmd/Ctrl + Shift + S 重新运行当前脚本。
RStudio 服务器
如果使用的是 RStudio 服务器,则默认情况下永远不会重新启动 R 会话。当关闭 RStudio 服务器选项卡时,实际上服务器仍会在后台运行。下次返回时,会发现与上次离开的地方一模一样。因此定期重启变得更加重要,这样才便于从头开始。
6.1.1.0.1 6.2.2 分析文件位于何处?
R 的工作目录概念绝不可忽视。这是 R 查找要求它加载的文件的位置,以及它所放置的保存文件的位置。RStudio 在控制台顶部显示当前工作目录:

可以通过运行getwd()命令打印工作目录:
> getwd()
[1] "C:/Users/LENOVO/Desktop/r_packages/BLIT/blit/R"可以从 R 中设置工作目录,但书中不建议这样做:
> setwd("/path/to/my/CoolProject")因为有更好的方法管理工作——RStudio项目。
6.1.2 RStudio项目
将项目的所有相关文件(输入数据、R 脚本、分析结果)全部保存在同一个目录中是非常明智的做法, RStudio 也对此提供了内置支持。
下面实操为例,创建一个阅读本书剩余部分时专用的项目:

随后在脚本编辑器中输入以下命令并保存文件,将其命名为 “diamonds.R”。再创建一个名为 “data” 的新文件夹。最后,运行完整脚本,该脚本会将相关 PNG 和 CSV 文件保存到项目目录中。本书后续会对这些文件进行探索。
library(tidyverse)
ggplot(diamonds, aes(x = carat, y = price)) +
geom_hex()
ggsave("diamonds.png")
write_csv(diamonds, "data/diamonds.csv")退出 RStudio,在电脑上找到该项目文件夹,双击.Rproj文件即可重新打开项目。
6.1.3 相对和绝对路径
一旦进入项目,就最好只使用相对路径,而非绝对路径。
为什么?举例说明:如果一个叫 Dingjia 的人做了个项目,编辑了一个data/diamonds.csv文件,显然使用的是相对路径,而其绝对路径为/Users/Dingjia/Documents/r4ds/data/diamonds。现在协作者 Zhangsan 要在自己的电脑上运行代码,即可正常进行,因为相对路径指向的绝对路径为/Users/Zhangsan/Documents/r4ds/data/diamonds。
从以上例子可以看出,使用相对路径对于共享协作意义非凡。
但还有一点要注意,不同操作系统的分隔符存在差异,例如Mac 和 Linux 使用正斜杠(/),Windows 使用反斜杠(\ )。在 R 中,反斜杠需要连续键入两个才可被识别,这很繁琐恼人,故建议直接使用正斜杠。