Sul*_*van 3 r installation-package
它似乎package_dependencies没有报告所有的依赖关系,或者install.packages正在以过分的方式报告.
例如,在Ubuntu 16.04上从源代码的新安装的R 3.5.0中,package_dependencies仅显示3个依赖项colorspace.但是当我安装时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’
Run Code Online (Sandbox Code Playgroud)
为什么所有这些包都被拉入?
通过设置dependencies=TRUE(而不是默认值NA),您不仅可以获得导入/依赖/链接,还可以获得所有建议的包:来自?install.packages,
...'TRUE'表示使用'c("取决于","Imports","LinkingTo","Suggests")''for'pkgs'和'c("Depends","Imports","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
Run Code Online (Sandbox Code Playgroud)
您安装了22个(而不是15或1278个)新软件包的原因是(1)已经安装了一些软件包(例如15个直接建议:依赖项包括至少6个基础/推荐软件包)和(2)如上文在文档块中所述,install.packages()不会递归地应用Suggests:require - 您将获得所有直接的Suggests:dependencies,但只需要(不建议)所需的2d顺序依赖项才能使它们工作.看一眼
lapply(package_dependencies("colorspace",
recursive=FALSE,which="all")$colorspace,
package_dependencies)
Run Code Online (Sandbox Code Playgroud)
(shiny并且shinyjs是真正的罪魁祸首......)
如果有一个版本package_dependencies给出了相同的结果install.packages(...,dependencies=TRUE),即在第一级获取所有建议的包但随后以递归方式继续查找所有必需的包,那将是很好的.(这可能是中级R课程的一项很好的家庭作业...)
好的,我有点疯了.我应该安装24个,而不是22个......?(我看了看差异:你得到23,而不是22个额外的包,而第24个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)
Run Code Online (Sandbox Code Playgroud)