2012-02-17 36 views
14

¿Cómo puedo determinar quiénes son los autores de un paquete? Dado que tenemos esta base de código ampliamente utilizada, creo que es apropiado que haga una referencia al software que uso en mi análisis.¿Cómo puedo determinar el autor de un paquete R?

¿Hay alguna manera de recuperar programáticamente el autor y cualquier otra información relevante?

En pseudocódigo, quiero hacer lo siguiente:

references("base") 

¿Cómo puedo hacer eso?

+14

El observador atento se dará cuenta de que esta es la pregunta número 10.000 con el [tag: r] etiqueta. Gracias a R-core y a todos los autores de los paquetes que han hecho de R el brillante sistema que es. – Andrie

+7

Técnicamente esta es la segunda pregunta 10000a. El anterior fue 10000, y luego se replicó una pregunta, y ahora la has traído a 10000 nuevamente. Si seguimos rehaciendo las preguntas, ¡podemos seguir celebrando todo el día! –

+3

El título de la pregunta sugiere una respuesta clara (@ spacedman's de below; 'packageDescription (" foo ") $ Author') pero el cuerpo enturbia un poco el agua. En lo que se refiere a R, hay una idea claramente definida de lo que es el Autor y está en la 'DESCRIPCIÓN '. 'citation()' realmente responde completamente la Q, sin embargo, porque hace una de dos cosas i) si hay un archivo 'CITATION' en el paquete, lo muestra y, si no está presente, genera automáticamente una cita basada en la 'DESCRIPCIÓN'. Esto no fue inmediatamente claro desde la Respuesta de Ritchie hasta que leí '' citación'. ¡Una cosa nueva que aprendí hoy! FTW –

Respuesta

9

Como otros han publicado las funciones, y no explicaciones, voy a llenar esto en.

distribuido con cada paquete es un archivo de descripción. Opcionalmente, un mantenedor puede incluir un archivo CITATION.

La función citation(pkgName) (donde pkgName es una cadena de caracteres) buscará primero el archivo CITATION, luego el archivo DESCRIPTION. Si se encuentra el primero, presentará el contenido de ese archivo. Si es el último, generará automáticamente la salida de BibTeX en función de los campos en el archivo DESCRIPTION. Este resultado puede requerir alguna revisión adicional, así que tenga cuidado antes de usar los contenidos directamente en una cita.

Para ver la descripción del paquete, packageDescription(pkgName) hará el truco. Esto devolverá una lista de elementos, cada uno basado en un campo del archivo DESCRIPTION. Esta es su mejor apuesta si quiere trabajar programáticamente con esos contenidos.

Una cuestión clave es que el autor (es) de un paquete y el desarrollador (es) del paquete pueden no ser las mismas personas. Si necesita ayuda con un paquete, debe ponerse en contacto con el (los) mantenedor (es). Un ejemplo es nlme. En primer lugar, un fragmento de la información de la citación:

> citation("nlme") 

To cite package 'nlme' in publications use: 

    Jose Pinheiro, Douglas Bates, Saikat DebRoy, Deepayan Sarkar and the R Development Core Team (2011). nlme: Linear and 
    Nonlinear Mixed Effects Models. R package version 3.1-102. 

Y un fragmento de la descripción Info:

> packageDescription("nlme") 
Package: nlme 
Title: Linear and Nonlinear Mixed Effects Models 
Author: Jose Pinheiro (S version), Douglas Bates (up to 2007), Saikat DebRoy (up to 2002), Deepayan Sarkar (up to 2005), the 
       R Core team. 
Maintainer: R-core <[email protected]> 

Tenga en cuenta que los autores enumeran participado en diferentes intervalos, pero, en caso de que necesite ayuda hoy en día, Envié un correo electrónico a [email protected]

Finalmente, como los mantenedores pueden crear su propio archivo CITATION, la información CITATION no necesita ser un subconjunto de la información DESCRIPTION. Un ejemplo es citation("base"), que incluye, entre otras cosas, el registro de ISBN, que no está en el resultado de packageDescription("base").


actualización 1. Si desea mostrar un cierto amor a autores o mantenedores, Aquí hay un código obtener una lista de los autores o personal de mantenimiento más frecuentemente llamado, basándose en la salida de installed.packages(). (Si desea limitarlo a los paquetes utilizados por algún código, entonces consulte el paquete mvbutils y la función foodweb - uno podría volverse loco y clasificarse según la frecuencia de llamadas o el tiempo empleado, si usa Rprof).

Lamentablemente, este código no divide las cadenas en varios nombres, por lo que una colaboración se trata como 1 "persona", posiblemente sin contar el trabajo de las personas. Si quieres un análisis cuidadoso, tendrás que hacer un poco más de trabajo. :)

getMaint <- function(x){ 
    return(packageDescription(x)$Maintainer) 
} 

getAuth <- function(x){ 
    return(packageDescription(x)$Author) 
} 

nicePrint <- function(x, N = 10){ 
    tmpTable <- head(sort(table(x), decreasing = TRUE), N) 
    tmpTable <- as.data.frame(tmpTable) 
    colnames(tmpTable) = "count" 
    return(tmpTable) 
} 

vPkgs <- installed.packages()[,"Package"] 

listA <- mapply(getAuth, vPkgs) 
listM <- mapply(getMaint, vPkgs) 

nicePrint(listA) 
nicePrint(listM) 

Aquí hay un ejemplo de una computadora; disculpas por las direcciones de correo electrónico oscuras feo. El código anterior produce las direcciones de correo electrónico correctas del archivo DESCRIPCIÓN, pero las he editado.

Autores:

nicePrint(listA) 
                count 
Diethelm Wuertz and many others, see the SOURCE file 14 
Hadley Wickham <xxxxxxxxxxxxxxxxxxx>      7 
R Development Core Team and contributors worldwide  7 
Henrik Bengtsson <xxxxxxxxxxxxxxxxx>      4 
Revolution Analytics          4 
Brian Ripley <xxxxxxxxxxxxxxxxxxxxx>.     3 
David Scott <xxxxxxxxxxxxxxxxxxxxxx>      3 
Luke Tierney <xxxxxxxxxxxxxxxxxxx>      3 
R Development Core Team         3 

Mantenedores:

nicePrint(listM) 
               count 
Rmetrics Core Team <xxxxxxxxxxxxxxxxxxxxxxxxxxx> 19 
R Core Team <xxxxxxxxxxxxxxxxxxxx>     13 
Brian Ripley <xxxxxxxxxxxxxxxxxxxxx>     9 
Achim Zeileis <xxxxxxxxxxxxxxxxxxxxxxxxxxx>   7 
Hadley Wickham <xxxxxxxxxxxxxxxxxxx>     7 
Torsten Hothorn <xxxxxxxxxxxxxxxxxxxxxxxxxxxxx>  7 
David Scott <xxxxxxxxxxxxxxxxxxxxxx>     5 
Henrik Bengtsson <xxxxxxxxxxxxxxxxx>     5 
Trevor Hastie <xxxxxxxxxxxxxxxxxxx>     5 
Luke Tierney <xxxxxxxxxxxxxxxxxxx>     4 
10

uso

packageDescription("base") 

y leer ...

+3

O simplemente subconjunto 'packageDescription (" base ") $ Autor' ;-) –

+0

Como' citation() 'se basa en el archivo DESCRIPTION, sin un archivo de citas, esta es la respuesta correcta. NB: podría ser bueno reemplazar 'base' con un nombre de paquete específico o' pkg', para que otros se den cuenta de la generalidad de esta respuesta. – Iterator

13

Para ser capaz de citar R o un paquete, utilice citation.

citation()  #for base packages or R itself 
citation("nlme") 
+0

Muéstremelo por un segundo. :) –

+2

@ RomanLuštrik: http://www.youtube.com/watch?v = By1JQFxfLMM –

+0

También le proporciona la referencia bibTeX adecuada, muy agradable. –

9

Algunos de limpieza necesaria, pero se entiende la idea. :)

library(RCurl) 
gg <- getURL("http://cran.r-project.org/web/packages/ggdendro/index.html") 
gg <- readLines(textConnection(gg)) 
gg[grep("Author:", gg)+1] 
[1] "<td>Andrie de Vries</td></tr>" 

Richie me adelantó, pero aquí es una forma corta de extraer alguna información utilizando citation.

citation("ggdendro")$author 
[1] "Andrie de Vries <[email protected]>" 

En los comentarios, Hadley sugirió otro método de leer directamente desde el archivo de descripción.

> gg <- read.dcf(url("http://cran.r-project.org/web/packages/ggdendro/DESCRIPTION")) 
> gg[, "Maintainer"] 
          Maintainer 
"Andrie de Vries <[email protected]>" 
+1

Lo bueno de esta respuesta es que funciona en paquetes desinstalados. –

+3

@BenBolker 'read.dcf (url (" http://cran.r-project.org/web/packages/ggdendro/DESCRIPTION "))' es aún más agradable. – hadley

+0

Gracias, @Hadley! Si no te importa, añado esto a la respuesta anterior para completarlo. –

Cuestiones relacionadas