我在 RStudio 中开发了一个 R 包,并设置了一个本地库来包含我的所有包。在我的 Ubuntu 系统中安装了一些更新后,我的 R 项目似乎失去了对本地库的跟踪并且无法加载与其关联的库。如果我尝试构建并重新加载包
R CMD INSTALL --no-multiarch --with-keep.source mypackage
该程序试图安装到库“/usr/local/lib/R/site-library/”,但被拒绝:
ERROR: No permission to install to directory '/usr/local/lib/R/site-library/'
据我所知,每当我重建我的包时,该行都指向我的本地目录,我所有的库都在该目录中
installing to library ‘/home/user/R/x86_64-pc-linux-gnu-library/3.2’
很明显,R 以某种方式丢失了项目和库之间的联系。
我尝试重新包含路径
.LibPaths("/home/user/R/x86_64-pc-linux-gnu-library/3.2")
但是,就在我再次重建包之后,程序在 x86_64-pc-linux-gnu-library 中创建了一个 3.3 目录。从那里,它无法找到与我的程序关联的库并引发另一个错误:
ERROR: dependencies '...', '...' are not available for package "mypackage"
有没有办法将程序恢复到以前的状态,这样我就不必重新安装所有东西并从头开始?
最佳答案
默认情况下,R 将主要-次要版本号添加到库路径 (?.libPaths
) 是有充分理由的,假设从 3.2 到 3.3 的跳转带来了效率或不兼容性。暗示本次版本跳转需要重新安装包。
如果你覆盖它,在 3.2 中组装的包在 3.3 中可能不会总是很好地运行。 (我不打算检验这个理论,如果你能反驳这个说法,请反馈,我真的很感兴趣!)
顺便说一句:你对 .libPaths
的调用似乎很可疑:我不知道大写字母 L 版本,调用它时你应该包括以前的路径(除非你真的想省略完全系统 R 库路径),例如:
.libPaths("/home/user/R/x86_64-pc-linux-gnu-library/3.2", .libPaths())
如果您选择这样做,您在其他人的包中发现的任何错误都可能是由于不兼容造成的,不一定要报告给开发人员。
另一种选择是将 3.2 安装中的所有软件包重新安装到 3.3 库路径中。像这样的东西应该有助于自动化这个过程:
# to reinstall packages installed in R-3.2 subdir into R-3.3
install.packages(list.files(path = "~/R/x86_64-pc-linux-gnu-library/3.2"))
关于r - 更新 Ubuntu 后如何重新建立 R 项目的默认库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37680077/