CRANのパッケージ紹介ページ(?)にはReverse Depends
とかReverse Imports
みたいなフィールドがあります。
これどうやってるんだろうな、と思ったら、その辺はtools
パッケージにユーティリティがそろってるっぽいです。
available.packages()
CRANにあるパッケージ情報を引っ張ってこれます。
library(tools) all_pkg <- available.packages() head(all_pkg) #> Package Version Priority Depends Imports LinkingTo #> A3 "A3" "0.9.2" NA "R (>= 2.15.0), xtable, pbapply" NA NA #> abc "abc" "2.0" NA "R (>= 2.10), nnet, quantreg, MASS, locfit" NA NA #> ABCanalysis "ABCanalysis" "1.0" NA "R (>= 2.10)" "Hmisc, plotrix" NA #> abcdeFBA "abcdeFBA" "0.4" NA "Rglpk,rgl,corrplot,lattice,R (>= 2.10)" NA NA #> ABCExtremes "ABCExtremes" "1.0" NA "SpatialExtremes, combinat" NA NA #> ABCoptim "ABCoptim" "0.13.11" NA NA NA NA #> Suggests Enhances License License_is_FOSS License_restricts_use OS_type Archs MD5sum NeedsCompilation #> A3 "randomForest, e1071" NA "GPL (>= 2)" NA NA NA NA NA "no" #> abc NA NA "GPL (>= 3)" NA NA NA NA NA "no" #> ABCanalysis NA NA "GPL-3" NA NA NA NA NA "no" #> abcdeFBA "LIM,sybil" NA "GPL-2" NA NA NA NA NA "no" #> ABCExtremes NA NA "GPL-2" NA NA NA NA NA "no" #> ABCoptim NA NA "GPL (>= 3)" NA NA NA NA NA "no" #> File Repository #> A3 NA "http://cran.rstudio.com/src/contrib" #> abc NA "http://cran.rstudio.com/src/contrib" #> ABCanalysis NA "http://cran.rstudio.com/src/contrib" #> abcdeFBA NA "http://cran.rstudio.com/src/contrib" #> ABCExtremes NA "http://cran.rstudio.com/src/contrib" #> ABCoptim NA "http://cran.rstudio.com/src/contrib"
これは単純に、http://レポジトリ/src/contrib/PACKAGES
というファイルを読んでるだけなので、contriburl
パラメータにオレオレCRANのURLを指定すれば他のレポジトリのパッケージも取ってこれます
rforge_pkg <- available.packages(contriburl = contrib.url("http://rforge.net", getOption("pkgType"))) head(rforge_pkg) #> Package Version Priority #> ALA4R "ALA4R" "1.01" NA #> Acinonyx "Acinonyx" "3.0-0" NA #> AntBioR "AntBioR" "0.03" NA #> CADStat "CADStat" "2.2-5" NA #> Cairo "Cairo" "1.5-7" NA #> CarbonEL "CarbonEL" "0.1-4" NA #> Depends #> ALA4R NA #> Acinonyx "R (>= 2.5.0)" #> AntBioR NA #> CADStat "JGR, XML, lattice, bio.infer, gdata, gmodels, car, MASS,\nquantreg, rpart, rJava" #> Cairo "R (>= 2.4.0)" #> CarbonEL "R (>= 2.0.0), grDevices" #> Imports LinkingTo Suggests #> ALA4R "stringr, httr, plyr, digest, RCurl, jsonlite (>= 0.9.8),\nassertthat, sp" NA "data.table, R.rsp" #> Acinonyx NA NA NA #> AntBioR "stringr, httr, plyr, digest, RCurl, assertthat" NA "data.table, R.rsp" #> CADStat NA NA NA #> Cairo NA NA "png" #> CarbonEL NA NA NA #> Enhances License License_is_FOSS License_restricts_use OS_type Archs MD5sum NeedsCompilation File #> ALA4R NA NA NA NA NA NA NA NA NA #> Acinonyx NA NA NA NA NA NA NA NA NA #> AntBioR NA NA NA NA NA NA NA NA NA #> CADStat NA NA NA NA NA NA NA NA NA #> Cairo NA NA NA NA NA NA NA NA NA #> CarbonEL NA NA NA NA NA NA NA NA NA #> Repository #> ALA4R "http://rforge.net/src/contrib" #> Acinonyx "http://rforge.net/src/contrib" #> AntBioR "http://rforge.net/src/contrib" #> CADStat "http://rforge.net/src/contrib" #> Cairo "http://rforge.net/src/contrib" #> CarbonEL "http://rforge.net/src/contrib"
ただし、devtools::install_github()
でインストールするパッケージにはcontribがない(レポジトリがない)ので、この方法では取れません。。
tools::package_dependencies()
パッケージの依存関係を調べる関数です。reverse = TRUE
を指定すると、そのパッケージに依存しているパッケージを調べられます。
rev_dep <- package_dependencies(packages = "ggplot2", all_pkg, which = "Depends", reverse = TRUE) head(rev_dep$ggplot2) #> [1] "alphahull" "AmpliconDuo" "aoristic" "apsimr" "bcrm" "bde" length(rev_dep$ggplot2) #> [1] 141
ちなみに、依存を表すフィールドは、Depends以外にもImportsとかEnhances(見たことないけど...)とかありますが、"all"
を指定するとそのへんまるっと調べてくれるらしいです。
rev_all <- package_dependencies(packages = "ggplot2", all_pkg, which = "all", reverse = TRUE) head(rev_all$ggplot2) #> [1] "abctools" "abd" "adegenet" "alm" "alphahull" "AmpliconDuo" length(rev_all$ggplot2) #> [1] 434
これだけで434...。道のりの長さを感じます。
あと分からないこと
インストールしてないパッケージのDESCRIPTIONを見るのってどうすればいいんでしょう。。CRANにあるやつについてはミラーがGithub上にあるので、https://raw.githubusercontent.com/cran/パッケージ名/master/DESCRIPTION
を決め打ちしてread.dcf()
すればいいんですけど、他のはやっぱパッケージをいちどダウンロードするしかないのかなあ。