Rの依存パッケージを一括で取得したい
初めに
この記事はRのアドベントカレンダーの17日目となります.
追記
自分の調査不足で記事が存在しておりました!!!
kyyonko.hatenablog.com 使いやすいし,ダウンロードまでしてくれるのでこちらを参考にしてください.
4月のお話(注意:事実とは異なる部分が含まれてます)
???「入社おめでとうございます.弊社はセキュリティーが厳しいので外部ネットワークに接続されてません.ですので,PythonやRのパッケージは申請してOKが出たらローカルの環境に入れることができます.」
私(...?!学生の頃より厳しい...?!)
起きたこと
私「glmnet 動かしたいからお伺いをたてるぞ」 私「その前に,一応document読んどくか」 私「ふむふむ,これ,glmnet以外にいくつかパッケージ必要じゃね?」 私「しかも,そのパッケージにまた必要なパッケージあるやん」 私「まあ,そんなに個数ないから目で調べてやるか」 私「あれ?調べて,お伺いをたてたら一日たったぞ???」 次の日 ???「ローカルにパッケージ入れていいよー」 私「これで動かせるぜ」 コンソール「install.package」 私「いい感じに動いたな」
翌月...
私「よーし,Rstan動かしたいからまたお伺いたてるぞ」 私「今回は前回より多いな」 私「まーいけるやろ」 私「また依存関係調べてたら一日が過ぎてしまった.」 次の日 ???「ローカルにパッケージ入れていいよー」 私「これで動かせるぜ」 コンソール「install.package」 R「足りないから動かないよ」 私「...うそん」
(注意:事実とは異なる部分が含まれてます)
やったこと
このような悲劇を二度と起こさないためにも, 一つのパッケージが依存しているパッケージを見つけ出したい!!
Rの関数に依存パッケージを表示してくれる関数tools::package_dependencies()
があります.
今回はtidyverseを例にします.
> tools::package_dependencies("tidyverse") $tidyverse [1] "broom" "cli" "crayon" "dbplyr" [5] "dplyr" "dtplyr" "forcats" "googledrive" [9] "googlesheets4" "ggplot2" "haven" "hms" [13] "httr" "jsonlite" "lubridate" "magrittr" [17] "modelr" "pillar" "purrr" "readr" [21] "readxl" "reprex" "rlang" "rstudioapi" [25] "rvest" "stringr" "tibble" "tidyr" [29] "xml2"
これらがtidyverseをインポートするときに必要となるパッケージとなります. さらに,これらが依存するパッケージを知りたいので次のような処理を行います.
> dependent_package <- tools::package_dependencies("tidyverse")[[1]] > i <- 0 > while( i <= length(dependent_package) ){ i = i + 1 pack <- dependent_package[i] dependent_package <- unique(c(dependent_package, tools::package_dependencies(pack)[[1]])) } > > dependent_package [1] "broom" "cli" "crayon" "dbplyr" [5] "dplyr" "dtplyr" "forcats" "googledrive" [9] "googlesheets4" "ggplot2" "haven" "hms" [13] "httr" "jsonlite" "lubridate" "magrittr" [17] "modelr" "pillar" "purrr" "readr" [21] "readxl" "reprex" "rlang" "rstudioapi" [25] "rvest" "stringr" "tibble" "tidyr" [29] "xml2" "backports" "ellipsis" "generics" [33] "glue" "methods" "utils" "grDevices" [37] "assertthat" "blob" "DBI" "lifecycle" [41] "R6" "tidyselect" "vctrs" "withr" [45] "data.table" "gargle" "uuid" "cellranger" [49] "curl" "ids" "rematch2" "digest" [53] "grid" "gtable" "isoband" "MASS" [57] "mgcv" "scales" "stats" "cpp11" [61] "pkgconfig" "mime" "openssl" "fansi" [65] "utf8" "clipr" "vroom" "tzdb" [69] "Rcpp" "progress" "callr" "fs" [73] "knitr" "rmarkdown" "selectr" "stringi" [77] "tools" "graphics" "rappdirs" "rematch" [81] "nlme" "Matrix" "splines" "farver" [85] "labeling" "munsell" "RColorBrewer" "viridisLite" [89] "askpass" "bit64" "prettyunits" "processx" [93] "evaluate" "highr" "yaml" "xfun" [97] "htmltools" "tinytex" "jquerylib" "lattice" [101] "colorspace" "sys" "bit" "ps" [105] "base64enc" "fastmap"
(注意:ちょっと時間かかります.)
いい感じに依存パッケージを抽出できました! これで,いらない仕事をやらなくて済みます!
まとめ
いつか使う誰かのために...