我熟悉 Unix 操作系统,但不了解开发人员如何决定组织应用程序库位置的一般逻辑。
以 R 为例。在 ubuntu 上安装 R 可以使用 apt-get 完成。您将在目录中获得安装:
/usr/local/R/lib/site-library --> All R packages go here.
/usr/lib/R/library --> R packages go here.
默认情况下,这两个目录都是不可写的。那么为什么 R 安装默认安装在那里呢?
我在将 R 包安装到“默认”目录(我猜是/usr/lib/R/library
?)时遇到了很多问题,所以我不得不将它们安装到本地目录中~/R/x86_64_pc-linux_gnu-library/3.2
。
我的问题是:如何摆脱所有“默认”库并仅使用本地库目录?不仅要删除旧的默认库,还要让 R 知道我的新默认库位于~/R/x86_64_pc-linux_gnu-library/3.2
?
答案1
如果您不想使用 R 的打包版本,那么您需要将您自己的版本安装到您将从中使用它的私人目录中。
如果您愿意,还可以创建附加 R 库的 Ubuntu 包,以便将它们安装到系统中。
答案2
默认情况下,这两个目录 [
/usr/local/R/lib/site-library
和/usr/lib/R/library
] 都是不可写的。那么为什么 R 安装默认安装在那里呢?我在将 R 包安装到“默认”目录(我猜是
/usr/lib/R/library
?)时遇到了很多问题,所以我不得不将它们安装到本地目录中~/R/x86_64_pc-linux_gnu-library/3.2
。
默认的 R 包(例如, base
) 安装在这些系统库中,因为这些库可供该机器上的所有用户使用。
虽然非 root 用户无法写入,但这是设计使然。用户可以将附加软件包安装到个人库中。
Sys.getenv('R_LIBS_USER')
您可以在 R 控制台中运行来查看此个人库的默认位置。
该.libPaths()
命令允许您查看当前的库搜索路径集,以及添加其他路径。
我的问题是:如何摆脱所有“默认”库并仅使用本地库目录?不仅要删除旧的默认库,还要让 R 知道我的新默认库位于
~/R/x86_64_pc-linux_gnu-library/3.2
?
您不想“删除”这些默认库,因为它们包含一组默认的 R 包。这些是 R 正常工作所必需的。
R 已经知道默认的个人图书馆位置(参见.libPaths()
)。
但是,您可以通过指定库位置来指定要安装包的位置并从中加载它们:
install.packages('packageName', lib = Sys.getenv('R_LIBS_USER'))
library('packageName', lib.loc = Sys.getenv('R_LIBS_USER'))
为了更轻松地控制 R 包版本(这对于可重复的研究尤为重要),我建议packrat
包。它可用于为每个项目配置一个个人库,从而允许每个项目使用自己的一组包(IE,不同版本)。使用时它会自动运行,因此您在安装或加载包时packrat
无需指定lib
nor参数。lib.loc