在 Linux 下使用旧版本 R 包的安全方法

问题描述 投票:0回答:1

有时我需要在 R 中运行旧代码,该代码是前一段时间使用的软件包版本与我现在使用的当前 R 版本不同的版本编写的。 当我不需要使用当前包的较新功能来更新和更正脚本,而只是检查这些脚本的结果时,更安全的方法是什么?我想到了两个选择(第一个完全是灾难,我的 Linux 发行版变得不稳定,不得不格式化我的电脑)。

  1. 安装多个 R 版本及其关联的“旧”软件包,并根据需要从一个版本切换到另一个版本(如果可能的话,可能来自 rstudio)。
  2. 只有一个 R 版本(假设这是相对较新的版本),并在需要时使用旧包,以防在将旧包与较新版本的 R 一起使用时不会出现依赖问题。 相关问题这里这里,但在尝试建议的解决方案之前,我想听听更多的意见。 因此,我将不胜感激有关使用旧包/函数运行旧脚本的更简单、更安全的方法的任何见解。
r deprecated r-package multiple-versions
1个回答
0
投票

利用 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"       
> 
> 
$ 
© www.soinside.com 2019 - 2024. All rights reserved.