我正在尝试运行在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,因此我需要基于终端的解决方案。
有人可以解释如何做吗?我感到非常密集和疲惫。谢谢。
答案 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的所有软件包,则第一个效果很好。
一种方法是为命令设置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的实例,那么...一切都会很高兴。
修改脚本本身以硬控制库路径。通过覆盖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"