2012-04-10 11 views
14

A veces me acostumbro al diseño de un paquete R particular y quiero buscar CRAN para todos los paquetes de ese autor (usemos a Hadley Wickham, por ejemplo). ¿Cómo puedo hacer una búsqueda así (me gustaría usar R pero este no tiene que ser el modo de búsqueda).Buscar un paquete por un autor en particular

+0

creo que este post http://stackoverflow.com/ questions/8722233/available-packages-by-publication-date tiene los ingredientes básicos que necesita ... –

+2

Publiqué una pregunta similar hace unos días (http://stackoverflow.com/questions/10032079/crantastic-p ackages-sorted-by-number-of-users), pero se cerró rápidamente por no ser una cuestión de programación real. Espero que seas más afortunado que yo (¡reconozco que tu fraseología es mucho mejor que la mía!). Si está interesado en una solución R, he publicado un artículo con código para raspar (algunos de) los datos de crantastic en un data.frame en http://r-de-jeu.blogspot.com/2012/04/50- most-used-r-packages.html. – flodel

+0

Quité la respuesta publicada en la pregunta y la agregué a la respuesta proporcionada por @DWin. Por favor, no responda su propia pregunta dentro de la pregunta; esto se vuelve demasiado confuso. Si la respuesta publicada no acaba de llegar, publique y acepte su propia respuesta. – Andrie

Respuesta

10

Crantastic can search by author. Puede hacer bastante más con crantastic, pero la funcionalidad que está buscando ya se proporciona allí.

+0

Eso funciona pero parece que no puedo buscar, pero debo buscar en la lista de paquetes hasta que encuentre el paquete del autor que quiero y luego pueda hacer clic en su nombre. Si lo estoy usando mal, házmelo saber. Por ejemplo, si busco [dbConnect] (http://crantastic.org/packages/dbConnect) puedo encontrar ese autor y hacer clic en su nombre, pero parece que no puedo escribir "Kurkiewicz" (autor de dbConnect) en la barra de búsqueda y devuelve sus paquetes. Si este es el mejor enfoque, servirá, pero parece que debe haber una forma mejor o quizás lo estoy haciendo mal. –

+0

Supongo que en realidad no probé con la barra de búsqueda que no parece buscar entre los mantenedores del paquete. En esa página acabo de hacer una simple Ctrl-f y busqué la página de esa manera. – Dason

+0

no sabía acerca de Ctrl + f Eso funciona. La primera respuesta y probablemente la más rápida hasta el momento obtiene el control. –

8

Adaptado de 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"]) 

Como yo soy un narcisista (y Hadley Wickham no tiene paquetes en el primer 100):

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

El principal problema de esta solución es que hacer de verdad (en lugar de solo para los primeros 100 paquetes) significa golpear CRAN 3000+ veces para la información del paquete ...

editar: una solución mejor, basado en la solución de Jeroen Oom en el mismo lugar:

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

El código debe ir al paquete 'fortunes'. P: ¿Qué obtienes si agregas Bolker a los autores del paquete R? A: Un simio. –

+0

Gracias Ben. Definitivamente un enfoque, pero como usted señala lleva una cantidad de tiempo considerable. El enfoque de Dason es probablemente el más eficiente.Gracias por la solución R :) –

+0

revise la versión actualizada ... –

11

No exactamente por el autor, pero tal vez el acceso de mantenedor También sería útil?

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

EDITAR por Tyler Rinker

sugerencia de Dwin puede ser llevado a buen término con estas líneas de código:

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 Publiqué una edición (una solución) a mi pregunta utilizando su sugerencia +1 –

+0

Debido a las filas en blanco, solo se devolvió el primer paquete alfabético de cada autor, ¿quizás debido a las actualizaciones de formato en el sitio? Editado para completar los valores perdidos y devolver todos los resultados. – Gregor

Cuestiones relacionadas