パッケージとその依存関係をインストールせずに、特定のパッケージのRパッケージ依存関係(すべての再帰依存関係)のリストを取得する簡単な方法はありますか?ポートアップグレードまたはaptの偽のインストールと似たもの。パッケージをインストールしないでRパッケージの依存関係を表示する
答えて
available.packages
関数の結果を使用できます。例えば、ggplot2
が依存するものを見るために:与える
pack <- available.packages()
pack["ggplot2","Depends"]
:あなたが達成したいかに応じて、あなたも、Imports
フィールドをチェックする必要があること
[1] "R (>= 2.14), stats, methods"
注意を。
クール - 私常に便利なツールについて知りたい悲しいことに、これは企業のファイアウォールの後ろについている私たちにとってはうまくいかないでしょう。私たちは 'browseURL( 'http://cran.r-project.org/web/packages/package.name')' –
のようなことをやっているかもしれません。おかげで、多くの助けになりました。再帰的にDependsとImportsのリストを検索することで、完全なリストを作成することができました。 –
@CarlWitthoftあなたがウィンドウを開いているなら、 'setInternet2()'が役に立ちます。 – hadley
私はRをインストールしていないので、どのRパッケージが私の会社での使用が要求されているRパッケージのリストに依存しているかを知る必要がありました。
私は、ファイル内のRパッケージのリストを反復し、再帰的に依存関係を発見するbashスクリプトを書いています。
このスクリプトでは、入力としてrinput_orig.txtというファイルが使用されます(下記例)。スクリプトは、rinput.txtという名前のファイルを作成します。
スクリプトは、以下のファイルを作成します。
- rdepsfound.txt - それは(下の例)に依存しているRパッケージを含めたリストの依存関係を。
- routput.txt - ライセンスとCRAN URL(以下の例)とともに、すべてのRパッケージ(元のリストと依存関係のリストから)を一覧表示します。
- r404.txt - カールしようとしたときに404が受信されたRパッケージのリスト。元のリストにタイプミスがある場合は、これが便利です。
bashスクリプト:
#!/bin/bash
# CLEANUP
rm routput.txt
rm rdepsfound.txt
rm r404.txt
# COPY ORIGINAL INPUT TO WORKING INPUT
cp rinput_orig.txt rinput.txt
IFS=","
while read PACKAGE; do
echo Processing $PACKAGE...
PACKAGEURL="http://cran.r-project.org/web/packages/${PACKAGE}/index.html"
if [ `curl -o /dev/null --silent --head --write-out '%{http_code}\n' ${PACKAGEURL}` != 404 ]; then
# GET LICENSE INFO OF PACKAGE
LICENSEINFO=$(curl ${PACKAGEURL} 2>/dev/null | grep -A1 "License:" | grep -v "License:" | gawk 'match($0, /<a href=".*">(.*)<\/a>/, a) {print a[0]}' | sed "s/|/,/g" | sed "s/+/,/g")
for x in ${LICENSEINFO[*]}
do
# SAVE LICENSE
LICENSE=$(echo ${x} | gawk 'match($0, /<a href=".*">(.*)<\/a>/, a) {print a[1]}')
break
done
# WRITE PACKAGE AND LICENSE TO OUTPUT FILE
echo $PACKAGE $LICENSE $PACKAGEURL >> routput.txt
# GET DEPENDENCIES OF PACKAGE
DEPS=$(curl ${PACKAGEURL} 2>/dev/null | grep -A1 "Depends:" | grep -v "Depends:" | gawk 'match($0, /<a href=".*">(.*)<\/a>/, a) {print a[0]}')
for x in ${DEPS[*]}
do
FOUNDDEP=$(echo "${x}" | gawk 'match($0, /<a href=".*">(.*)<\/a>/, a) {print a[1]}' | sed "s/<\/span>//g")
if [ "$FOUNDDEP" != "" ]; then
echo Found dependency $FOUNDDEP for $PACKAGE...
grep $FOUNDDEP rinput.txt > /dev/null
if [ "$?" = "0" ]; then
echo $FOUNDDEP already exists in package list...
else
echo Adding $FOUNDDEP to package list...
# SAVE FOUND DEPENDENCY BACK TO INPUT LIST
echo $FOUNDDEP >> rinput.txt
# SAVE FOUND DEPENDENCY TO DEPENDENCY LIST FOR EASY VIEWING OF ALL FOUND DEPENDENCIES
echo $FOUNDDEP is a dependency of $PACKAGE >> rdepsfound.txt
fi
fi
done
else
echo Skipping $PACKAGE because 404 was received...
echo $PACKAGE $PACKAGEURL >> r404.txt
fi
done < rinput.txt
echo -e "\nRESULT:"
sort -u routput.txt
例rinput_orig.txt:
shiny
rmarkdown
xtable
RODBC
RJDBC
XLConnect
openxlsx
xlsx
Rcpp
例コンソール出力スクリプトを実行する:
Processing shiny...
Processing rmarkdown...
Processing xtable...
Processing RODBC...
Processing RJDBC...
Found dependency DBI for RJDBC...
Adding DBI to package list...
Found dependency rJava for RJDBC...
Adding rJava to package list...
Processing XLConnect...
Found dependency XLConnectJars for XLConnect...
Adding XLConnectJars to package list...
Processing openxlsx...
Processing xlsx...
Found dependency rJava for xlsx...
rJava already exists in package list...
Found dependency xlsxjars for xlsx...
Adding xlsxjars to package list...
Processing Rcpp...
Processing DBI...
Processing rJava...
Processing XLConnectJars...
Processing xlsxjars...
Found dependency rJava for xlsxjars...
rJava already exists in package list...
例rdepsfound.txt:
DBI is a dependency of RJDBC
rJava is a dependency of RJDBC
XLConnectJars is a dependency of XLConnect
xlsxjars is a dependency of xlsx
例routput.txt:
shiny GPL-3 http://cran.r-project.org/web/packages/shiny/index.html
rmarkdown GPL-3 http://cran.r-project.org/web/packages/rmarkdown/index.html
xtable GPL-2 http://cran.r-project.org/web/packages/xtable/index.html
RODBC GPL-2 http://cran.r-project.org/web/packages/RODBC/index.html
RJDBC GPL-2 http://cran.r-project.org/web/packages/RJDBC/index.html
XLConnect GPL-3 http://cran.r-project.org/web/packages/XLConnect/index.html
openxlsx GPL-3 http://cran.r-project.org/web/packages/openxlsx/index.html
xlsx GPL-3 http://cran.r-project.org/web/packages/xlsx/index.html
Rcpp GPL-2 http://cran.r-project.org/web/packages/Rcpp/index.html
DBI LGPL-2 http://cran.r-project.org/web/packages/DBI/index.html
rJava GPL-2 http://cran.r-project.org/web/packages/rJava/index.html
XLConnectJars GPL-3 http://cran.r-project.org/web/packages/XLConnectJars/index.html
xlsxjars GPL-3 http://cran.r-project.org/web/packages/xlsxjars/index.html
を、私はこれが誰かを役に立てば幸い!
別のきれいで簡単な解決策は、ライブラリpackrat
の内部機能recursivePackageDependencies
です。ただし、パッケージはライブラリにインストールする必要があります。利点は自作のnon-CRANパッケージでも動作することです。例:
packrat:::recursivePackageDependencies("ggplot2",lib.loc = .libPaths()[1])
寄付:?
[1] "R6" "RColorBrewer" "Rcpp" "colorspace" "dichromat" "digest" "gtable"
[8] "labeling" "lazyeval" "magrittr" "munsell" "plyr" "reshape2" "rlang"
[15] "scales" "stringi" "stringr" "tibble" "viridisLite"
'ツール:: dependsOnPkgs' – hadley
おかげで、それが文書で明示的にではないので、私にいくつかの時間:)を保存したのだろう、たとえば(ggplot2、installed = available.packages()) –
ローカルの 'DESCRIPTION'からすべてのdepsを非再帰的に抽出するためのヘルパー関数(' utils'、 'tools'?)があれば、ggplotはdependsOnPkgsファイルを作成すると、答えとして投稿されてもいいと思います。さもなければ、 'read.dcf'の様々なdep型+白い空白を取り除くラッパーは、それを達成することができます。 – jangorecki