install.packages 安装量远远超过 package_dependencies
install.packages installs far more than package_dependencies
似乎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’
为什么所有这些包裹都被拉进来了?
通过设置 dependencies=TRUE
(而不是 NA
的默认值),您不仅会得到 imports/depends/linkingto,还会得到 建议的所有 个包裹:来自 ?install.packages
、
... ‘TRUE’ means to use ‘c("Depends", "Imports", "LinkingTo",
"Suggests")’ for ‘pkgs’ and ‘c("Depends", "Imports",
"LinkingTo")’ for added dependencies: this installs all the
packages needed to run ‘pkgs’, their examples, tests and
vignettes (if the package author specified them correctly).
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 个 base/recommended packages) 和 (2) 如上面文档块中所述,install.packages()
不递归地应用 Suggests: 要求 - 你得到所有直接的 Suggests: 依赖项,但只有二维顺序依赖项 需要(不建议)才能使它们正常工作。看看
lapply(package_dependencies("colorspace",
recursive=FALSE,which="all")$colorspace,
package_dependencies)
(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)
似乎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’
为什么所有这些包裹都被拉进来了?
通过设置 dependencies=TRUE
(而不是 NA
的默认值),您不仅会得到 imports/depends/linkingto,还会得到 建议的所有 个包裹:来自 ?install.packages
、
... ‘TRUE’ means to use ‘c("Depends", "Imports", "LinkingTo", "Suggests")’ for ‘pkgs’ and ‘c("Depends", "Imports", "LinkingTo")’ for added dependencies: this installs all the packages needed to run ‘pkgs’, their examples, tests and vignettes (if the package author specified them correctly).
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 个 base/recommended packages) 和 (2) 如上面文档块中所述,install.packages()
不递归地应用 Suggests: 要求 - 你得到所有直接的 Suggests: 依赖项,但只有二维顺序依赖项 需要(不建议)才能使它们正常工作。看看
lapply(package_dependencies("colorspace",
recursive=FALSE,which="all")$colorspace,
package_dependencies)
(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)