当你在R中尝试安装软件包并且没有访问默认库路径的权限时,R会询问:
你想使用个人库吗?
您是否要创建一个个人库'〜/path'以安装软件包?
但是,如果您正在运行R脚本,这些消息将不会显示,安装将失败。我可以预定义一个特定的路径并指示install.packages
使用它,但我不想创建一个仅针对此R脚本的附加库路径。我只想使用默认的个人库。有没有一种方法强制创建个人库而无需交互?
您可以使用Sys.getenv("R_LIBS_USER")
来获取本地库搜索位置。
这就是我最终采取的方法,似乎有效(最难的部分是测试解决方案,因为问题只会在您尝试安装软件包的第一次出现):
# create local user library path (not present by default)
dir.create(path = Sys.getenv("R_LIBS_USER"), showWarnings = FALSE, recursive = TRUE)
# install to local user library path
install.packages(p, lib = Sys.getenv("R_LIBS_USER"), repos = "https://cran.rstudio.com/")
# Bioconductor version (works for both Bioconductor and CRAN packages)
BiocManager::install(p, update = FALSE, lib = Sys.getenv("R_LIBS_USER"))
如评论中@hrbrmstr所指出的,强制安装软件包可能不是一个好主意,因此使用时需自行承担风险。
BiocManager :: install()
。 - llrsR_LIBS_USER
,并且R
将尊重该设置,但即使在环境中未设置R_LIBS_USER
,Sys.getenv("R_LIBS_USER")
仍将返回有意义的内容。 - bers
.libPaths()
? - zx8754install.packages
提供的help(".libPaths")
,其中包含了一个链接。该文档解释了R语言中库搜索路径的初始化方式,首先会从环境变量R_LIBS
中获取以冒号分隔的目录列表,这些目录是R语言库树的根目录,然后再加上R_LIBS_USER
环境变量中的目录。只有那些在此时存在的目录才会被包含进来。默认情况下,R_LIBS
未设置,而R_LIBS_USER
被设置为主目录下名为‘R/R.version$platform-library/x.y’
的目录(对于CRAN OS X版本,则为‘Library/R/x.y/library’
),其中x.y.z为当前使用的R版本号。 - hrbrmstrpip
具有可传递的user
标志,可告诉它使用当前用户的主目录而不是系统目录。install.packages
已经具备了执行此操作并确定用户软件包的位置的功能。它应该具有一个可选参数user
,我可以将其设置为TRUE
. - theferrit32~/.local/lib/R
,然后使用R_LIBS_USER=~/.local/lib/R R
运行R。 - theferrit32