【问题标题】:automatically create personal library in R在 R 中自动创建个人库
【发布时间】:2017-02-14 05:17:50
【问题描述】:

当你尝试在 R 中安装一个包并且你没有访问默认库路径的权限时,R 会询问你:

您想改用个人图书馆吗?

您想创建一个个人库“~/path”来安装吗 打包成?

但是,如果您正在运行 Rscript,这些消息将不会显示并且安装将失败。我可以预定义一个特定的路径并指示 install.packages 使用它,但我不想创建一个特定于这个 Rscript 的附加库路径。我只想使用默认的个人库。有没有办法强制创建个人库而不需要交互?

【问题讨论】:

  • 更新.libPaths()?
  • 您应该完整阅读help(".libPaths")install.packages 上的帮助提供了一个链接。 "库搜索路径在启动时从环境变量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’),用于 R xyz`我>
  • (空间不足) 话虽如此,我并不喜欢实际安装包的分析脚本。我也可能是少数,并且也是一个强迫性可疑的网络安全家伙,但我宁愿有一个我手动运行的 pkg 安装脚本或一个脚本中的预检检查,然后通知我我缺少什么,特别是如果脚本依赖于较旧或较新版本的软件包,并且出于某种原因我正在运行特定版本。
  • 最好有一个预先在与分析脚本不同的上下文中运行的安装脚本。但是,如果该安装脚本本身是完全自动化的,则需要一种直接的方法来安装用户(非 root)软件包,而无需任何手动交互。例如pip 有一个简单的user 标志,可以通过它来告诉它使用当前用户的主目录而不是系统目录。 install.packages 已经具有执行此操作并确定用户包应该去哪里的功能。它应该有一个user 可选参数,我可以将其设置为TRUE
  • 我现在解决它的方法是让安装脚本创建~/.local/lib/R,然后使用R_LIBS_USER=~/.local/lib/R R运行R

标签: r rscript


【解决方案1】:

您可以使用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 在 cmets 中指出的那样,强制安装软件包可能不是一个好主意,因此使用风险自负。

【讨论】:

  • 请注意 biocLite 不应再用于安装来自 Bioconductor 的软件包。使用BiocManager::install()
  • @llrs 好点。这几乎是 4 年前的事了。现已更新。
猜你喜欢
  • 2021-11-25
  • 2023-01-20
  • 1970-01-01
  • 1970-01-01
  • 2016-05-10
  • 1970-01-01
  • 2019-08-27
  • 2021-12-08
  • 2017-12-05
相关资源
最近更新 更多