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

时间:2020-08-04 03:41:16

标签: r version

我正在尝试运行在R的较旧版本上构建的脚本。它在运行R / 3.4.4的一台计算机上运行。它在运行R / 3.6.3的另一个中断。作者在github上签出了一个问题来解决此问题(我认为),但是他正在完成博士学位,所以可能会在两个月,两年或永远不会发生。

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

我确定以前已经有人问过这个问题,但是我找不到不涉及RStudio的任何东西。我的WSL(运行Ubuntu 20.04)上没有RStudio,因此我需要基于终端的解决方案。

有人可以解释如何做吗?我感到非常密集和疲惫。谢谢。

2 个答案:

答案 0 :(得分:2)

更改PATH可能在某些方面很有用,但是(由于我推断)您打算将其作为 exception ,因此只需使用完整路径运行可执行文件应该足够了。如果您的任务封装在名为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是默认/当前版本)。不幸的是,这些目录中的软件包并未按特定版本存储,因此(甚至可能)使用带有R-3.4.4的较新版本的软件包会以某种方式失败。

两种避免这种可能性的策略。假设您在特定目录中拥有R-3.4.4的所有软件包,则第一个效果很好。

  1. 一种方法是为命令设置R_LIBS_USER(env-var)。它可以在同一命令行上,也可以通过某些.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"
    

    有了这个,假设在第一个路径中找到了所有需要的软件包,它将永远不会出现在其他路径中,因此应该不会发生冲突。如果您的脚本是稳定的/不变的,并且没有在.local中破坏R-3.4.4的实例,那么...一切都会很高兴。

  2. 修改脚本本身以硬控制库路径。通过覆盖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安装...它需要所有基本内容以及您可能已安装的任何其他软件包。

答案 1 :(得分:0)

您可能已经在旧目录之后将新目录添加到了路径。您可以使用以下方法进行检查:

echo $PATH

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

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