在 Linux 子系统和 Windows 之间共享 R 库

3

我有一个 Ubuntu 虚拟机,其中安装了 R。最近,当我试图在 Ubuntu 中调用一个 R 脚本时,出现了库未安装的错误。是否有一种方式可以让 Ubuntu 的 R 安装使用我的 Windows R 库,以便我不必在 Ubuntu 上重新安装它们?

StratifiedFullModel/SecondRun$ Rscript StratifiedFullModels.R
Loading required package: car
Installing package into ‘/usr/local/lib/R/site-library’
(as ‘lib’ is unspecified)
Warning in install.packages(x, dependencies = TRUE) :
  'lib = "/usr/local/lib/R/site-library"' is not writable
Error in install.packages(x, dependencies = TRUE) :
  unable to install packages
Calls: lapply -> FUN -> install.packages
In addition: Warning message:
In library(package, lib.loc = lib.loc, character.only = TRUE, logical.return = TRUE,  :
  there is no package called ‘car’
Execution halted

这很奇怪,因为此脚本已设置检查软件包(其中之一是“car”),并且要么加载它们,要么安装它们。我怀疑由于权限的某些问题而未能这样做。

这很麻烦,因为我可能想编写自动安装软件包的脚本,而无需手动执行安装操作。如果我与同事共享脚本或将工作转移到新机器上,则手动安装操作不仅费时,还不够方便。

编辑:在Ubuntu中运行R并尝试运行install.packages("car")返回以下错误:

> install.packages("car")
Installing package into ‘/usr/local/lib/R/site-library’
(as ‘lib’ is unspecified)
Warning in install.packages("car") :
  'lib = "/usr/local/lib/R/site-library"' is not writable
Would you like to use a personal library instead? (yes/No/cancel) cancel
Error in install.packages("car") : unable to install packages
>

我刚取消了安装。我认为这证实了我的怀疑,即存在权限问题。

你尝试过使用 chmod 700 /usr/local/lib/R/site-library 命令来赋予写入权限吗? - jay.sf
2
(1) 在不同操作系统之间共享“库”通常是不可行的。虽然并非所有R的软件包都有真正的“编译”共享库,但我认为分享它们是不可行的。(2) “自动安装软件包……与同事共享脚本”,这是“可重复性研究”试图缓解的真正困境。要求在您的 Windows 和 您的 Linux 之间共享库无助于解决与同事共享的问题,这是一个不同的问题。(3) install.packages错误非常清楚,请使用个人库。你试过了吗? - r2evans
你想使用个人库吗?(是/否/取消)不要取消。 - Hong Ooi
我故意取消了问题,问题不在于此。而是关于如何让脚本来完成它。我想看看是否存在权限问题,通过手动安装车辆。 - Angus Campbell
2个回答

2
请注意,本答案基于我在WSL上的经验,而非特别针对R。如果有使用R在WSL下的用户能够提供更新或更权威的答案,我将不胜感激。
我认为如果你尝试从WSL中至少使用一些Windows R库,你将会遇到问题。理论上,“纯R”库应该是可行的,但从一些快速搜索来看,R也包含了平台特定的编译代码。在这种情况下,如果任何库以本地代码形式存在,则当从Linux调用时,Windows库将会出现与Linux路径结构(例如/home而不是C:\Users)、进程和其他操作系统结构相关的问题。
至于权限问题,R正在使用一个默认的库目录(位于/usr/local/lib/R/site-library下),只有root才有写入权限。似乎你可以使用类似以下的内容来更改库安装目录:
> install.packages("car", lib="/home/<username>/.local/lib/R/site-library/")

当然,您需要先创建该目录。有关更多详细信息,请参见此页面

2
Linux和Windows上的R安装是完全独立的,包括软件包也是如此。尽管如此,您可以在WSL中运行Windows版本,这样您就不需要维护重复的环境。
下面是我电脑上同时运行Linux和Windows R的截图,都是在WSL内部运行的: enter image description here

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接