2013-02-01 60 views
24

क्या पैकेज पैकेज और इसकी निर्भरताओं को स्थापित किए बिना किसी दिए गए पैकेज के लिए आर पैकेज निर्भरता (सभी रिकर्सिव निर्भरता) की सूची प्राप्त करने का कोई आसान तरीका है? पोर्टअपग्रेड या एपीटी में नकली इंस्टॉल के समान कुछ।पैकेजिंग स्थापित किए बिना आर पैकेज निर्भरता लिस्टिंग

+3

'उपकरण :: dependsOnPkgs' – hadley

+3

धन्यवाद,, के लिए एक उदाहरण है कि मुझे कुछ समय :) बचाया का होता है, चूंकि यह दस्तावेज में स्पष्ट नहीं है आइए मान लें कि ggplot निर्भर करेगाऑनपीकेजीएस ("ggplot2", install = available.packages()) –

+0

यदि सभी डिप्टी निकालने के लिए कहीं भी कोई सहायक कार्य है ('utils', 'tools'?) तो स्थानीय' विवरण 'से गैर-पुनरावर्ती रूप से निकालें फ़ाइल तो यह भी जवाब के रूप में पोस्ट करना अच्छा लगेगा। अन्यथा 'read.dcf' पर एक रैपर विभिन्न डिप्टी प्रकार + स्ट्रिपिंग व्हाइटस्पेस निकालने, इसे प्राप्त कर सकते हैं। – jangorecki

उत्तर

28

आप available.packages फ़ंक्शन के परिणाम का उपयोग कर सकते हैं। उदाहरण के लिए, को देखने के लिए क्या ggplot2 पर निर्भर करता है:

pack <- available.packages() 
pack["ggplot2","Depends"] 

कौन देता है:

[1] "R (>= 2.14), stats, methods" 

ध्यान दें कि आप क्या हासिल करना चाहते हैं पर निर्भर करता है, तो आप Imports क्षेत्र भी जांच करने की आवश्यकता हो सकती है।

+0

कूल - I हमेशा आसान उपकरण के बारे में पता लगाना पसंद है। अफसोस की बात है, यह उन लोगों के लिए काम नहीं करेगा जो कॉर्पोरेट फ़ायरवॉल के पीछे फंस गए हैं। हम 'browsURL ('http://cran.r-project.org/web/packages/package.name') ' –

+0

जैसे कुछ करने में फंस सकते हैं धन्यवाद, इससे बहुत मदद मिली, मैंने प्रश्न का दायरा थोड़ा बदल दिया, लेकिन निर्भरता और आयात के लिए सूची की खोज करके मैं पूरी सूची बनाने के लिए उपलब्ध था। –

+0

@CarlWitthoft यदि आप विंडोज़ पर हैं, तो 'setInternet2()' मदद कर सकता है। – hadley

5

मेरे पास आर इंस्टॉल नहीं है और मुझे यह पता लगाने की आवश्यकता है कि आर पैकेज की मेरी कंपनी में उपयोग के लिए अनुरोध किए जाने वाले आर पैकेज की सूची पर कौन सी आर पैकेज निर्भरताएं थीं।

मैंने एक बैश स्क्रिप्ट लिखी जो एक फ़ाइल में आर पैकेज की एक सूची में पुनरावृत्त करता है और निर्भरता को फिर से खोजेगा।

स्क्रिप्ट इनपुट के रूप में rinput_orig.txt नामक फ़ाइल का उपयोग करती है (नीचे उदाहरण)। स्क्रिप्ट rinput.txt नाम की एक फ़ाइल बनायेगी क्योंकि यह इसका काम करता है।

स्क्रिप्ट निम्न फ़ाइलें पैदा करेगा:

  • rdepsfound.txt - आर पैकेज है कि यह (नीचे उदाहरण) पर निर्भर है सहित सूचियाँ निर्भरता पाया।
  • routput.txt - सभी आर पैकेज (मूल सूची और निर्भरताओं की सूची से) लाइसेंस और सीआरएएन यूआरएल (नीचे उदाहरण) के साथ सूचीबद्ध करता है।
  • r404.txt - आर पैकेज की सूची जहां कर्ल करने की कोशिश करते समय 404 प्राप्त हुआ था। यह आसान है अगर आपकी मूल सूची में कोई टाइपो है।

बैश स्क्रिप्ट:

#!/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:

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... 
:

shiny 
rmarkdown 
xtable 
RODBC 
RJDBC 
XLConnect 
openxlsx 
xlsx 
Rcpp 

उदाहरण सांत्वना उत्पादन जब स्क्रिप्ट चलाने

उदाहरण 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 

मुझे आशा है कि यह किसी को मदद करता है!

1

लाइब्रेरी packrat से आंतरिक फ़ंक्शन recursivePackageDependencies आंतरिक फ़ंक्शन एक और साफ और सरल समाधान है। हालांकि, पैकेज को आपकी मशीन पर कुछ लाइब्रेरी में स्थापित किया जाना चाहिए। इसका फायदा यह है कि यह स्वयं निर्मित गैर-सीआरएएन पैकेजों के साथ भी काम करता है। उदाहरण:

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"