有时我需要在 R 中运行旧代码,该代码是前一段时间使用的软件包版本与我现在使用的当前 R 版本不同的版本编写的。 当我不需要使用当前包的较新功能来更新和更正脚本,而只是检查这些脚本的结果时,更安全的方法是什么?我想到了两个选择(第一个完全是灾难,我的 Linux 发行版变得不稳定,不得不格式化我的电脑)。
利用 R 使用不同库路径的能力,效果非常好。您可以通过
.libPaths()
轻松设置这些。
作为一个具体的例子,我碰巧喜欢使用
roxygen2
版本6.0.1。所以我把它保存在我的“正常”R 安装不知道的目录中。在帮助程序脚本中(因为我也喜欢从命令行使用它),然后我会这样做
if (!dir.exists("~/.R/cache/roxygen2")) {
cat("** Using cached version 6.0.1 of roxygen2.\n")
.libPaths("~/.R/cache")
}
## load roxygen
library(roxygen2)
并且在存在该目录的计算机上,它将作为库路径的前缀,并且在此会话中使用旧的 roxygen 版本。
你可以很容易地概括这一点。我们这样做是为了持续集成和其他用例。
另一个例子是 e.g. 由我使用
r-devel
提供,因为它有自己的库路径(这样我就可以先由 r-devel
编译包,然后再由系统编译包(这样我就不必重建所有包) ):
$ RD -q -e '.libPaths()'
> .libPaths()
[1] "/usr/local/lib/R-devel/lib/R/library" "/usr/local/lib/R/site-library"
>
>
$