R被设计用于共享计算资源,如 Linux 服务器。因此,R的启动为个性化定制提供了很多途径:既适用于系统的每个用户,也适用于每个单独的用户。然而,这种灵活性伴随着代价的:复杂性。
当然,R 的启动过程相当复杂:
R启动流程,来源:Thomas Lin Pedersen[1]
然而,大多数 R 用户可以忽略这种复杂性的大部分内容而专注于两个主要文件。
这些文件是更广泛的定制文件家族(通常称为 dotfiles[4])的R特定实例。它们被用来调整许多程序的行为,特别是那些在unix命令行中有根的程序。
很多人都把他们的 dotfile 存储在 GitHub[5] 上,一个找到灵感的好方法就是浏览其他人的dotfile存储库。找到R特定的dotfiles的一种方法是在 GitHub上搜索 filename:.Rprofile[6]。
.Renviron
.Renviron
文件用于定义敏感信息,如 API 密钥(如 GitHub 或 twitter),以及R特定的环境变量,如历史大小(R_HISTSIZE=100000
)和默认库路径 R_LIBS_USER
。
.Renviron
文件包含需要设置的环境变量列表。它的内容不是 R 代码,而是使用类似于命令行 Shell 类似的语法。
编辑 .Renviron
文件最简单的方式是运行 usethis::edit_r_environ()
。
一个 .Renviron
文件简单的例子:
R_HISTSIZE=100000
GITHUB_PAT=abc123
R_LIBS_USER=~/R/%p/%v
.Rprofile
.Rprofile
文件包含 R 启动时要运行的 R 代码。它在 .Renviron
文件运行后被执行。一般 .Rprofile
位于用户的家目录(即~/.Rprofile
),然而可以通过设置 R_PROFILE_USER
环境变量进行修改。
编辑 .Rprofile
文件最简单的方式是运行 usethis::edit_r_profile()
。
.Rprofile
文件常被用来干的事情:
一个好的经验法则是,你应该只把你在 R 终端上交互式运行的东西放在 .Rprofile
文件中。如果它出现在R脚本或 R Markdown 文件中,它不应该出现在你的 .Rprofile
文件中。
如果你在 .Rprofile
中设置了这些选项,那么尝试在没有 .Rprofile
的另一个系统上运行你的一个脚本,它将不再是可重复的。一些有问题的例子是加载分析中使用的包(如 dplyr 或 ggplot2)或更改默认选项,这些选项会改变输出的值,如options(stringsAsFactors = FALSE)
。
此外,由于 .Rprofile
由每个R进程(包括由R自身启动的进程)运行,因此使用interactive()
保护大部分代码是很重要的,这样它只在交互式会话(用终端控制的会话)中运行。
.Rprofile
一个例子:
options(repos = c(CRAN = "https://cran.rstudio.org"))
if (interactive()) {
options(width = 120)
}
在启动 R 时,可以使用--vanilla
参数在没有任何启动文件的情况下运行R。在RStudio中,你可以通过检查项目选项->在会话启动/恢复时禁用 .Rprofile
执行,从而在没有任何启动文件的情况下运行 R。你还可以选择性地分别使用--no-init-file
和 --no-site-file
禁用用户或站点的 .Rprofile
,并使用 --no-environ
禁用环境变量文件。
.Renviron
和 .Rprofile
都必须以换行符结束。如果没有,则忽略最后一行,不发出警告或错误。
[1]
Thomas Lin Pedersen: https://twitter.com/thomasp85/status/961553618196418560
[2]
.Renviron
: https://rstats.wtf/r-startup.html#renviron
[3]
.Rprofile
: https://rstats.wtf/r-startup.html#rprofile
[4]
dotfiles: https://www.quora.com/What-are-dotfiles
[5]
dotfile 存储在 GitHub: https://dotfiles.github.io/
[6]
filename:.Rprofile: https://github.com/search?q=filename%3A.Rprofile+interactive&type=Code