似乎package_dependencies
没有报告所有依赖项,
或者install.packages
正在走向过度。
例如,在Ubuntu 16.04上从源代码的新安装R 3.5.0中,
package_dependencies仅显示colorspace
的3个依赖项。但是当我
安装colorspace
,其他22个软件包被拉入。
$ /sdata/ftp/rlang/tdi/bin/R --vanilla
...(R announcements)
.libPaths()
[1] "/sdata/ftp/rlang/tdi/lib64/R/library"
library( tools)
avail <- available.packages( repos="https://mirrors.nics.utk.edu/cran")
package_dependencies("colorspace", recursive=TRUE, db=avail)
$colorspace
[1] "methods" "graphics" "grDevices"
install.packages("colorspace", dependencies=TRUE,
lib="/some/empty/dir",
repos="https://mirrors.nics.utk.edu/cran")
also installing the dependencies ‘zoo’, ‘Rcpp’, ‘BH’, ‘magrittr’,
‘lmtest’, ‘httpuv’, ‘mime’, ‘jsonlite’, ‘xtable’, ‘digest’,
‘htmltools’, ‘R6’, ‘sourcetools’, ‘later’, ‘promises’, ‘crayon’,
‘rlang’, ‘kernlab’, ‘mvtnorm’, ‘vcd’, ‘dichromat’, ‘shiny’, ‘shinyjs’
为什么所有这些包都被拉入了?
答案 0 :(得分:5)
通过设置dependencies=TRUE
(而不是默认值NA
),您不仅可以获得导入/依赖/链接,还可以获得所有建议的包:来自?install.packages
,
...'TRUE'表示使用'c(“取决于”,“Imports”,“LinkingTo”, “建议”)'为'pkgs'和'c(“取决于”,“进口”, “LinkingTo”)'用于添加依赖项:这将安装所有 运行'pkgs'所需的包,他们的例子,测试和 小插图(如果包作者正确指定了它们)。
package_dependencies
的模拟是which="all"
。
length(package_dependencies("colorspace",
recursive=FALSE,which="all")$colorspace)
## 15
length(package_dependencies("colorspace",
recursive=TRUE,which="all")$colorspace)
## 1278
您安装了22个(而不是15或1278个)新软件包的原因是(1)已经安装了一些软件包(例如15个直接建议:依赖项包括至少6个基本/推荐软件包)和(2)如上文文档块中所述,install.packages()
不会递归地应用Suggests:要求 - 您将获得所有直接的Suggests:dependencies,但只需要
lapply(package_dependencies("colorspace",
recursive=FALSE,which="all")$colorspace,
package_dependencies)
(shiny
和shinyjs
是真正的罪魁祸首......)
如果有package_dependencies
的版本提供与install.packages(...,dependencies=TRUE)
相同的结果,即在第一级获取所有建议的包但随后以递归方式继续查找所有必需的包,那将是很好的。 (这可能是中级R课程的一项很好的家庭作业......)
colorspace
本身......)
a1 <- available.packages()
i1 <- installed.packages()
order1 <- package_dependencies("colorspace",
db=a1,
recursive=FALSE,
which="all")$colorspace
order2 <- plyr::llply(order1,
package_dependencies,
db=a1,
recursive=TRUE,
.progress="text")
all_pkgs <- unique(c(order1,unlist(order2,recursive=TRUE)))
base_pkgs <- rownames(i1)[!is.na(i1[,"Priority"])]
setdiff(all_pkgs,base_pkgs)