2012-04-10 14 views
14

Czasami przyzwyczaiłem się do konkretnego projektu paczki R i chcę przeszukać CRAN dla wszystkich paczek tego autora (na przykład skorzystajmy z Hadley Wickham). Jak mogę zrobić takie wyszukiwanie (chciałbym użyć R, ale to nie musi być tryb wyszukiwania).Wyszukaj paczki danego autora

+0

myślę ten post http://stackoverflow.com/ pytania/8722233/available-packages-by-publication-date-ma podstawowe składniki, których potrzebujesz ... –

+2

Podobne pytanie opublikowałem kilka dni temu (http://stackoverflow.com/questions/10032079/crantastic-p ackages-sorted-by-number-of-users), ale szybko został zamknięty, ponieważ nie był prawdziwym pytaniem programistycznym. Mam nadzieję, że będziesz miał więcej szczęścia ode mnie (co prawda twoje słowa są znacznie lepsze niż moje!). Jeśli jesteś zainteresowany rozwiązaniem R, opublikowałem artykuł z kodem do skrobania (niektórych) danych crantastic w data.frame na http://r-de-jeu.blogspot.com/2012/04/50- najczęściej używany-r-packages.html. – flodel

+0

Usunąłem odpowiedź zamieszczoną w pytaniu i dodałem ją do odpowiedzi udzielonej przez @DWin. Proszę nie odpowiadać na własne pytanie w pytaniu - to staje się zbyt mylące. Jeśli wysłana odpowiedź nie do końca się tam dostanie, opublikuj i zaakceptuj własną odpowiedź. – Andrie

Odpowiedz

10

. Możesz zrobić trochę więcej dzięki crantastic, ale funkcja, której szukasz, jest już dostępna.

+0

To działa, ale nie mogę tego wyszukać, ale muszę przeszukiwać listę pakietów, dopóki nie znajdę paczki autora, którego chcę, a następnie mogę kliknąć na jego nazwę. Jeśli używam go źle, daj mi znać. Na przykład, jeśli szukam [dbConnect] (http://crantastic.org/packages/dbConnect), mogę znaleźć tego autora i kliknąć jego nazwisko, ale nie mogę wpisać "Kurkiewicz" (autor dbConnect) w pasku wyszukiwania i zwróć jego paczki. Jeśli to najlepsze podejście, ale wydaje się, że jest lepszy sposób, albo robię to źle. –

+0

Chyba nie wypróbowałem paska wyszukiwania, który nie szuka przeszukiwacza pakietów. Na tej stronie zrobiłem prosty Ctrl-f i przeszukałem stronę w ten sposób. – Dason

+0

nie wiedział o Ctrl + f To działa. Pierwsza odpowiedź i prawdopodobnie najszybsza jak dotąd dostaje czek. –

8

Adaptacja available.packages by publication date:

## restrict to first 100 packages (by alphabetical order) 
pkgs <- unname(available.packages()[, 1])[1:100] 
desc_urls <- paste(options("repos")$repos,"/web/packages/", pkgs, 
    "/DESCRIPTION", sep = "") 
desc <- lapply(desc_urls, function(x) read.dcf(url(x))) 
authors <- sapply(desc, function(x) x[, "Author"]) 

Ponieważ jestem narcyzem (i Hadley Wickham nie ma pakietów w pierwszej 100):

pkgs[grep("Bolker",authors)] 
# [1] "ape" 

Głównym problemem z tego rozwiązania jest to, że robi to na prawdę (a nie tylko na pierwsze 100 pakietów) oznacza uderzanie CRAN 3000 razy dla informacji o pakiecie ...

edit: lepsze rozwiązanie, w oparciu o rozwiązania Jeroen OOM w tym samym miejscu:

recent.packages.rds <- function(){ 
    mytemp <- tempfile() 
    download.file(paste0(options("repos")$repos,"/web/packages/packages.rds"), 
        mytemp) 
    mydata <- as.data.frame(readRDS(mytemp), row.names=NA) 
    mydata$Published <- as.Date(mydata[["Published"]]) 
    mydata 
} 

mydata <- recent.packages.rds() 
unname(as.character(mydata$Package[grep("Wickham",mydata$Author)])) 
# [1] "classifly" "clusterfly" "devtools"  "evaluate"  "fda"   
# [6] "geozoo"  "ggmap"  "ggplot2"  "helpr"  "hints"  
# [11] "HistData"  "hof"   "itertools" "lubridate" "meifly"  
# [16] "memoise"  "munsell"  "mutatr"  "normwhn.test" "plotrix"  
# [21] "plumbr"  "plyr"   "productplots" "profr"  "Rd2roxygen" 
# [26] "reshape"  "reshape2"  "rggobi"  "roxygen"  "roxygen2"  
# [31] "scales"  "sinartra"  "stringr"  "testthat"  "tourr"  
# [36] "tourrGui" 
+2

Kod powinien przejść do pakietu 'fortuny'. P: co otrzymasz, jeśli pominiesz Bolkera w autorze pakietów R? Odp .: Małpa. –

+0

Dzięki Ben. Zdecydowanie podejście, ale jak zauważysz zajmuje dużo czasu. Podejście Dasona jest prawdopodobnie najbardziej efektywne.Dzięki za rozwiązanie R :) –

+0

sprawdź zaktualizowaną wersję ... –

11

Niezupełnie przez autora, ale być może dostęp przez opiekuna będzie również przydatny?

http://cran.r-project.org/web/checks/check_summary_by_maintainer.html#summary_by_maintainer

EDIT Tyler Rinker

sugestia Dwin mogą być doprowadzone do skutku z tych linii kodu:

search.lib <- function(term, column = 1){ 
    require(XML) 
    URL <- "http://cran.r-project.org/web/checks/check_summary_by_maintainer.html#summary_by_maintainer" 
    dat <-readHTMLTable(doc=URL, which=1, header=T, as.is=FALSE) 
    names(dat) <- trimws(names(dat)) 
    dat$Maintainer[dat$Maintainer == ""] <- NA 
    dat$Maintainer = zoo::na.locf(dat$Maintainer) 
    if (is.numeric(column)) { 
     dat[agrep(term, dat[, column]), 1:3] 
    } else { 
     dat[agrep(term, dat[, agrep(column, colnames(dat))]), 1:3] 
    } 
} 

search.lib("hadley") 
search.lib("bolker") 
search.lib("brewer", 2) 
+0

DWin Zamieściłem (moje) rozwiązanie na moje pytanie, korzystając z Twojej sugestii +1 –

+0

Z powodu pustych wierszy zwracano tylko alfabetycznie pierwszy pakiet każdego autora - może z powodu aktualizacji formatowania na stronie? Edytowane w celu uzupełnienia brakujących wartości i zwrócenia wszystkich wyników. – Gregor