2012-02-17 10 views
14

Come posso determinare chi sono gli autori di un pacchetto? Dato che abbiamo questa base di codice ampiamente utilizzata, ritengo sia appropriato fare riferimento al software che utilizzo nella mia analisi.Come si determina l'autore di un pacchetto R?

Esiste un modo per recuperare a livello di codice l'autore e qualsiasi altra informazione pertinente?

In pseudocodice, voglio fare le seguenti operazioni:

references("base") 

Come posso fare questo?

+14

L'osservatore attento noterà che questa è la domanda 10.000 ° con il [tag: r] tag. Grazie a R-core e tutti gli autori di pacchetti che hanno reso R il brillante sistema che è. – Andrie

+7

Tecnicamente questa è la seconda 10000a domanda. Il precedente era 10000, quindi una domanda è stata rimandata e ora l'hai riportata di nuovo a 10000. Se continuiamo a ripetere le domande possiamo continuare a festeggiare tutto il giorno! –

+3

Il titolo della domanda suggerisce una risposta chiara (@ spacedman's below; 'packageDescription (" foo ") $ Author'), ma il corpo confonde un po 'l'acqua. Per quanto riguarda R, esiste un'idea chiaramente definita di ciò che l'Autore è e che è nella "DESCRIZIONE". 'citation()' risponde completamente alla Q, tuttavia, perché fa una delle due cose i) se c'è un file 'CITATION' nel pacchetto che mostra che, e se non è presente, genera automaticamente una citazione basata su la 'DESCRIZIONE'. Questo non è stato immediatamente chiaro dalla risposta di Ritchie finché non ho letto "citazione". Una cosa nuova che ho imparato oggi! FTW –

risposta

9

Come altri hanno scritto funzioni, e non le spiegazioni, ve lo riempirò questo.

distribuita con ogni pacchetto è un file di descrizione. Facoltativamente, un maintainer può includere un file CITATION.

La funzione citation(pkgName) (dove pkgName è una stringa di caratteri) cercherà prima il file CITATION, quindi il file DESCRIPTION. Se il primo viene trovato, presenterà il contenuto di quel file. Se quest'ultimo, genera automaticamente l'output BibTeX in base ai campi nel file DESCRIPTION. Questa uscita potrebbe richiedere alcune revisioni aggiuntive, quindi fai attenzione prima di utilizzare i contenuti direttamente in una citazione.

Per visualizzare la descrizione del pacchetto, packageDescription(pkgName) farà il trucco. Ciò restituirà un elenco di elementi, ciascuno basato su un campo dal file DESCRIPTION. Questa è la soluzione migliore se vuoi lavorare a livello di codice con questi contenuti.

Un problema chiave è che l'autore (i) di un pacchetto e il/i manutentore/i del pacchetto potrebbero non essere le stesse persone. Se hai bisogno di assistenza con un pacco, dovresti contattare il/i manutentore/i. Un esempio è nlme. In primo luogo, un frammento da informazioni di citazione:

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

E un frammento da informazioni DESCRIZIONE:

> 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]> 

nota che gli autori elencati partecipato oltre intervalli diversi, ma, se si vuole aiuto oggi, 'e-mail [email protected]

Infine, poiché i manutentori possono creare il proprio file CITATION, le informazioni CITATION non devono essere un sottoinsieme delle informazioni DESCRIZIONE. Un esempio è da citation("base"), che include, tra le altre cose, il record ISBN, che non è nell'output di packageDescription("base").


Update 1. Se vuoi mostrare un po 'di amore per autori o manutentori, qui è un codice ottenere un elenco dei più frequentemente chiamato gli autori o manutentori, in base alla produzione di installed.packages(). (Se desideri limitarlo ai pacchetti usati da qualche codice, controlla il pacchetto mvbutils e la funzione foodweb - potresti diventare pazzo e classificare ulteriormente in base alla frequenza delle chiamate o al tempo trascorso, se si utilizza Rprof.)

Sfortunatamente, questo codice non divide le stringhe in più nomi, quindi una collaborazione viene considerata come 1 "persona", probabilmente sottovalutando il lavoro dei singoli. Se vuoi un'analisi accurata, dovrai fare un po 'più di lavoro. :)

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) 

Ecco un esempio da un computer; scuse per i brutti indirizzi di posta elettronica oscurati. Il codice sopra riportato produce gli indirizzi email corretti dal file DESCRIPTION, ma li ho modificati.

Autori:

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 

Maintainer:

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") 

e leggere ...

+3

O semplicemente sottoinsieme 'packageDescription (" base ") $ Author' ;-) –

+0

Poiché' citation() 'è basato sul file DESCRIPTION, in assenza di un file di citazione, questa è la risposta corretta. NB: potrebbe essere utile sostituire 'base' con uno specifico nome di pacchetto o' pkg', in modo che altri realizzino la generalità di questa risposta. – Iterator

13

Per essere in grado di citare R o un pacchetto, utilizzare citation.

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

Sconfiggimi di un secondo. :) –

+2

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

+0

Fornisce anche il riferimento BibTeX appropriato, molto bello. –

9

Alcune operazioni di pulizia necessarie, ma si ottiene l'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 mi ha battuto sul tempo, ma ecco un breve tratto di estrarre alcune informazioni utilizzando citation.

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

Nei commenti, Hadley ha suggerito un altro metodo di lettura direttamente dal file DESCRIPTION.

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

La cosa bella di questa risposta è che funziona su pacchetti disinstallati. –

+3

@BenBolker 'read.dcf (url (" http://cran.r-project.org/web/packages/ggdendro/DESCRIPTION "))' è ancora più bello. – hadley

+0

Grazie, @Hadley! Se non ti dispiace, sto aggiungendo questo alla risposta di cui sopra per completezza. –

Problemi correlati