2012-05-31 23 views
5

सभी संकुल क्रैन पर उपलब्ध सूची available.packages() समारोह नहीं है। क्या सभी उपलब्ध विगेट्स खोजने के लिए कोई समान कार्य है? यदि नहीं, तो मैं सभी विगेट्स और उनके द्वारा जुड़े संकुलों की सूची कैसे प्राप्त करूं?उपलब्ध क्रैन विगनेट्स

एक कोने मामले मन data.table पैकेज 3 विगनेट्स इसके साथ जुड़े है में रखने के लिए के रूप में।

संपादित करें: Andrie की प्रतिक्रिया प्रति मुझे पता है मैं स्पष्ट नहीं था। मैं सभी उपलब्ध स्थानीय विगेट्स खोजने के लिए विग्नेट फ़ंक्शन के बारे में जानता हूं, मैं CRAN पर सभी संकुलों के सभी विगेट्स प्राप्त करने के लिए एक तरीका के बाद हूं।

+1

में पूरी चीज को लपेट सकता हूं, आप सीआरएएन पर सभी पैकेज इंडेक्स को पार्स कर सकते हैं (उदाहरण के लिए 'एक्सएमएल' और' आरसीआरएलएल 'के साथ) हालांकि मुझे पूरा यकीन है कि सिसाडमिन इस विचार को पसंद नहीं करेंगे। – daroczig

+0

मैं कुछ तो सवाल के जवाब में यह को देखकर याद करने लगते हैं (यह अब नहीं मिल सकता है) और निर्णय लेने से है कि सूचना 'available.packages()' के उत्पादन में शामिल नहीं है के बाद से, और न ही लागू करने के परिणाम में '' readRDS' @ क्रैन/वेब/संकुल/packages.rds' (जेरोन Ooms से एक चाल), मैं एक गैर scraping तरह से यह करने के लिए के बारे में सोच नहीं सकता है ... –

+0

यह एक पैकेज का हिस्सा हो सकता है कि सीआरएएन के लिए है, इसलिए स्क्रैपिंग विधि तब तक का सबसे अच्छा तरीका नहीं है जब तक कि ... मैं एक बार स्क्रैप कर सकता हूं और पैकेज में डेटा सेट के रूप में जानकारी संग्रहीत करता हूं जो पैकेज के प्रत्येक नए संस्करण के साथ अपडेट हो जाता है। शायद एक संभावना है। –

उत्तर

5

मैं कुछ तो सवाल के जवाब में यह को देखकर याद करने लगते हैं (यह अब नहीं मिल सकता है) और निर्णय लेने से कि जब जानकारी available.packages() के उत्पादन में शामिल नहीं है, और न ही @CRAN/web/packages/packages.rds को readRDS लागू करने (जेरोन Ooms से एक चाल) के परिणाम में, मैं एक गैर scraping तरह से यह करने के लिए के बारे में सोच नहीं सकता है ...

एच पहले की मेरी स्क्रेपर, पहले 100 संकुल (44 विगनेट्स के लिए अग्रणी) के लिए आवेदन किया

pkgs <- unname(available.packages()[, 1])[1:100] 
vindex_urls <- paste0(getOption("repos"),"/web/packages/", pkgs, 
    "/vignettes/index.rds", sep = "") 
getf <- function(x) { 
     ## I think there should be a way to do this directly 
     ## with readRDS(url(...)) but I can't get it to work 
    suppressWarnings(
       download.file(x,"tmp.rds",quiet=TRUE)) 
    readRDS("tmp.rds") 
} 
library(plyr) 
vv <- ldply(vindex_urls, 
      .progress="text", 
      function(x) { 
       if (inherits(z <- try(getf(x),silent=TRUE), 
        "try-error")) NULL else z 
      }) 
tmpf <- function(x,n) { if (is.null(x)) NULL else 
          data.frame(pkg=n,x) } 
vframe <- do.call(rbind,mapply(tmpf,vv,pkgs)) 
rownames(vframe) <- NULL 
head(vframe[,c("pkg","Title")]) 

तरीके इस ऊपर/साफ यह अधिक कॉम्पैक्ट बनाने के लिए हो सकता है, लेकिन यह ठीक से काम करने लगता है। कभी-कभी रणनीति/बार-बार आपकी स्क्रैप उचित लगती है। या यदि आप चाहते थे कि आप दैनिक (या साप्ताहिक या जो भी उचित लगते हैं) को स्क्रैप कर सकें और परिणामों को कहीं भी सार्वजनिक रूप से सुलभ/पोस्ट कर सकें, तो पैकेज में हार्ड-कोड किए गए यूआरएल के साथ एक फ़ंक्शन शामिल करें ... या यहां तक ​​कि एक अच्छी रूप से स्वरूपित HTML तालिका भी बनाएं लिंक होते हैं, कि पूरी दुनिया इस्तेमाल कर सकते हैं (और फिर पृष्ठ के लिए वियाग्रा विज्ञापन जोड़ सकते हैं और $$ लाभ $$ ...)

संपादित: दोनों डाउनलोड और एक समारोह में readRDS लिपटे, इसलिए मैं try

+0

मुझे लगता है कि मैं इस या एक संशोधित संस्करण के साथ स्क्रैप करने जा रहा हूं और पैकेज में डेटा सेट के रूप में आउटपुट शामिल कर रहा हूं। धन्यवाद हालांकि मैं शायद वियाग्रा विज्ञापन से गुजर जाऊंगा। –

+0

मैंने ऊपर दिए गए फ़ंक्शन को आजमाया और एक समस्या में भाग गया। मैंने 'पेस्ट 0' का उपयोग कर ', sep =" "को हटा दिया है। लेकिन जब मैं वी वी भाग चलाने की कोशिश करता हूं।यह 20% पर बंद हो जाता है और मुझे निम्न त्रुटि देता है: 'readRDS में त्रुटि (tmp.rds): कनेक्शन से पढ़ने में त्रुटि' इस पर काबू पाने के तरीके पर कोई विचार? मैं क्या गलत कर रहा हूं? –

+1

पता नहीं है। शायद कहीं दूषित index.rds फ़ाइल है? आप इसे पढ़ने के लिए 'readRDS' के आस-पास एक और 'प्रयास' कथन डाल सकते हैं ... क्योंकि फ़ंक्शन 'ldply' का उपयोग करता है, इसके पास संसाधित होने वाले वर्तमान पैकेज के नाम तक पहुंच नहीं है; यह इसे चूसने लायक हो सकता है और अधिक पारदर्शिता के लिए 'फॉर लूप' का उपयोग कर सकता है ... –

2

फ़ंक्शंस vignette() और browseVignettes() आपकी मशीन पर स्थापित संकुल के सभी विगेट्स सूचीबद्ध करें। के बाद से यह हाइपरलिंक के साथ एक वेब पेज बनाता है

vignette(package="data.table") 

Vignettes in package ‘data.table’: 

datatable-faq       Frequently asked questions (source, pdf) 
datatable-intro      Quick introduction (source, pdf) 
datatable-timings      Timings of common tasks (source, pdf) 

browseVignettes() विशेष रूप से उपयोगी है:

browseVignettes(package="data.table") 

Vignettes found by browseVignettes(package = "data.table") 

Vignettes in package data.table 

Frequently asked questions - PDF R LaTeX/noweb 
Quick introduction - PDF R LaTeX/noweb 
Timings of common tasks - PDF R LaTeX/noweb 
+1

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

संबंधित मुद्दे