我需要切换到旧版本的 R 以 运行 一个脚本

I need to switch to an old version of R to run one script

我正在尝试 运行 一个基于旧版本 R 构建的脚本。它 运行 在一台计算机上运行,​​即 运行ning R/3 .4.4.它在另一个 运行ning R/3.6.3 上中断。作者在他的 github 上检查了一个问题来解决这个问题(我认为),但他正在完成他的博士学位,所以这可能会在两个月、两年或永远不会发生。

我在 $HOME/.local 路径中安装了 R/3.4.4(另一个在 /usr/bin 中)。当我 运行 这个脚本时,我只是不知道如何临时指向 .local 中的版本。我尝试将 R_HOME 设置为 export R_HOME=$HOME/.local 但 R 忽略了它。

我确定之前有人问过这个问题,但我找不到任何不涉及 RStudio 的内容。我的 WSL 上没有 RStudio (运行ning Ubuntu 20.04),所以我需要一个基于终端的解决方案。

有人可以解释一下怎么做吗?我感到非常沉重,非常疲惫。谢谢。

您可能在旧目录之后将新目录添加到路径中。您可以使用以下方式检查:

echo $PATH

如果是这种情况,则需要将其添加到路径前面。假设你安装在/usr/local/bin,那么你应该使用下面的命令:

export PATH="/usr/local/bin:$PATH"

更改您的 PATH 在某些方面可能会有用,但由于(我推断)您打算将此作为 例外 ,那么只需 运行 这与可执行文件的完整路径应该足够了。如果你的任务被封装在一个名为 script.R 的脚本中,那么也许

$HOMD/.local/R_3.4.4/bin/x64/Rscript /path/to/script.R

应该足够了。

不过,这可能会困扰您,具体取决于当前 R 的安装方式。你说它在/usr/bin/,这表明它的库路径可能是这样的:

$ Rscript -e '.libPaths()'
[1] "/usr/local/lib/R/site-library"
[2] "/usr/lib/R/site-library"
[3] "/usr/lib/R/library"

(这里的 Rscript 是 default/current 版本)。不幸的是,这些目录中的包未存储为 version-specific,因此可能(甚至可能)使用带有 R-3.4.4 的 more-modern 版本的包会以某种方式失败。

抢占这种可能性的两种策略。假设您在特定目录中拥有 R-3.4.4 的所有包,第一个工作正常。

  1. 一种方法是为命令设置R_LIBS_USER (env-var)。这可以在同一个 command-line 上,也可以通过某些 .Renviron 文件或类似文件来控制:

    $ mkdir -p .local/R-3.4.4/library
    $ R_LIBS_USER=~/.local/R-3.4.4/library Rscript -e '.libPaths()'
    [1] "/home/r2/.local/R-3.4.4/library"
    [2] "/usr/local/lib/R/site-library"
    [3] "/usr/lib/R/site-library"
    [4] "/usr/lib/R/library"
    

    有了这个,假设所有需要的包都在第一个路径中找到,它永远不会在其他路径中查找,所以应该不会遇到冲突。如果您的脚本是 stable/unchanging 并且您没有在 .local 内破坏您的 R-3.4.4 实例,那么......一切都很好。

  2. 将脚本本身修改为 hard-control 库路径。通过 over-riding R_HOME (env var),您可以覆盖所有默认值。

    echo "R_HOME=~/.local/R-3.4.4" > .Renviron # current working directory, regardless of script.R
    Rscript /path/to/script.R
    

    这假设 .local/R_3.4.4 是一个 完整的 R 安装...它需要所有基本的东西以及您可能已安装的任何其他软件包。