【问题标题】:Installing dependent R packages to R_LIBS_USER directory将依赖的 R 包安装到 R_LIBS_USER 目录
【发布时间】:2016-07-13 22:40:21
【问题描述】:

我在系统级别安装了一个库(在本例中为 ggplot2)。我想将 ggplot2 及其所有依赖项安装到 R_LIBS_USER 变量中指定的新目录。当我运行install.packages('ggplot2', dependencies=TRUE) 时,它似乎复制了 ggplot2 目录,但没有其他其他依赖项。有什么方法可以确保 ggplot2 所依赖的其他包进入我在 R_LIBS_USER 中指定的目录?

【问题讨论】:

  • install.packages 有一个lib 参数……你试过吗?如果您想要当前目录中两个或更多位置中的第二个,那么我将发布代码作为可能的答案。
  • 我确实尝试过,但也没有用。 lib 参数,当未指定时,默认为 .libPaths() 中的第一个元素,这是我为 R_LIBS_USER 传递的目录
  • 您是说将依赖项放入不在 .libPaths() 上的位置?难以置信。您是 RStudio 用户吗?
  • 我正在使用命令行 R。其他依赖项已经安装在系统范围内,并且在我的 .libPaths() 中的其他地方。我只是不明白为什么不以与 ggplot2 相同的方式复制依赖项。我希望它适用于一切
  • 所以您希望代码对 R 已经“可见”的包进行不必要的副本?一旦你安装了 ggplot2,就会有一个 packageDescription 函数可以让你读取它的依赖。

标签: r package-managers cran


【解决方案1】:

也许这...假设您的 $R_LIBS_USER 环境变量已被另一个位置以某种方式移动到搜索路径中的第二个位置。 (检查.libPaths())

 install.packages('ggplot2', lib= .libPaths[2], dependencies=TRUE)

或者:

  install.packages('ggplot2', lib= Sys.getenv(("R_LIBS_USER"), dependencies=TRUE)

评论表明问题在于导入的包已经在 R 正在搜索的库中......所以不会被不必要地安装。 DESCRIPTION 文件的 Depends 条目中没有包,但有在 Imports 部分中命名的包。从已安装的包中读取依赖项:

packageDescription("ggplot2", fields = c("Depends","Imports") )

#-----------
Depends: R (>= 3.1)
Imports: digest, grid, gtable (>= 0.1.1), MASS, plyr (>=
      1.7.1), reshape2, scales (>= 0.3.0), stats

-- File: /Library/Frameworks/R.framework/Versions/3.3/Resources/library/ggplot2/Meta/package.rds 
-- Fields read: Depends, Imports

> str( packageDescription("ggplot2", fields = c("Depends","Imports") ) )
List of 2
 $ Depends: chr "R (>= 3.1)"
 $ Imports: chr "digest, grid, gtable (>= 0.1.1), MASS, plyr (>= 1.7.1),\nreshape2, scales (>= 0.3.0), stats"
 - attr(*, "class")= chr "packageDescription"
 - attr(*, "fields")= chr [1:2] "Depends" "Imports"
 - attr(*, "file")= chr "/Library/Frameworks/R.framework/Versions/3.3/Resources/library/ggplot2/Meta/package.rds"

投反对票表明有人不喜欢指出这些事实,但是……事实就是事实。

【讨论】:

  • Sys.getenv(("R_LIBS_USER") 是错误的语法,我猜。
  • 啊,可以。固定。
猜你喜欢
  • 2016-08-21
  • 1970-01-01
  • 1970-01-01
  • 2015-04-02
  • 2017-01-31
  • 1970-01-01
  • 2015-08-29
  • 1970-01-01
  • 2012-06-04
相关资源
最近更新 更多