2012-02-17 12 views
14

Jak ustalić, kim są autorzy pakietu? Biorąc pod uwagę, że mamy tę powszechnie używaną bazę kodu, myślę, że powinienem odwołać się do oprogramowania, którego używam w mojej analizie.Jak określić autora pakietu R?

Czy istnieje sposób programowego pobrania autora i innych istotnych informacji?

W Pseudokod, chcę wykonać następujące czynności:

references("base") 

W jaki sposób można to zrobić?

+14

Uważny obserwator zauważy, że jest to pytanie z 10000-sze [Tag: r] znacznik. Dziękuję R-core i wszystkim autorom pakietów, którzy sprawili, że R jest genialnym systemem. – Andrie

+7

Technicznie jest to drugie 10000. pytanie. Poprzedni miał już 10000, a następnie pytanie zostało ponownie przypisane, a teraz przyniosłeś go ponownie do 10000. Jeśli będziemy nadal powtarzać pytania, będziemy mogli świętować cały dzień! –

+3

Tytuł pytania sugeruje jasną odpowiedź (@ spacedman's od dołu; 'packageDescription (" foo ") $ Author'), ale ciało trochę męti wodę. Jeśli chodzi o R, istnieje jasno zdefiniowana idea tego, co Autor jest i który jest w "OPISIE". 'citation()' naprawdę w pełni odpowiada na Q, ponieważ robi jedną z dwóch rzeczy: i) jeśli w pakiecie znajduje się plik 'CITATION', to wyświetla go, a jeśli nie jest obecny, automatycznie generuje cytat na podstawie "OPIS". To nie było od razu jasne z Ritchie's Answer, dopóki nie przeczytałem "cytatu". Jedna nowa rzecz, której się dziś nauczyłem! FTW –

Odpowiedz

9

Jak inni napisali funkcje, a nie wyjaśnienia, będę wypełnić to w.

Ukazuje się z każdym pakietem jest plik opisu. Opcjonalnie opiekun może dołączyć plik CITATION.

Funkcja citation(pkgName) (gdzie pkgName jest ciągiem znaków) będzie najpierw szukać pliku CITATION, a następnie pliku DESCRIPTION. Jeśli pierwsza zostanie znaleziona, wyświetli zawartość tego pliku. Jeśli to drugie, automatycznie wygeneruje dane wyjściowe BibTeX na podstawie pól w pliku DESCRIPTION. To wyjście może wymagać dodatkowej korekty, więc należy zachować ostrożność przed użyciem zawartości bezpośrednio w cytowaniu.

Aby zobaczyć opis paczki, packageDescription(pkgName) zrobi lewy. Spowoduje to wyświetlenie listy elementów, każdy oparty na polu z pliku DESCRIPTION. To jest twój najlepszy zakład, jeśli chcesz programowo pracować z tymi treściami.

Jednym z kluczowych problemów jest to, że autor (y) paczki i opiekun (y) paczki mogą nie być tymi samymi osobami. Jeśli potrzebujesz pomocy z pakietem, powinieneś skontaktować się z opiekunem (ami). Przykładem jest nlme. Po pierwsze, fragment z informacją Cytat:

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

I urywek z informacją opis:

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

Należy zauważyć, że autorzy wymienione uczestniczyło ponad różnych odstępach czasu, ale trzeba chcieć pomocy dzisiaj, ty e-mail z [email protected]

Wreszcie, ponieważ opiekunowie mogą tworzyć własne pliki CITATION, informacje o CITATION nie muszą być podzbiorem informacji o DESCRIPTION. Przykładem jest citation("base"), który zawiera, między innymi, rekord ISBN, którego nie ma na wyjściu packageDescription("base").


Aktualizacja 1. Jeśli chcesz pokazać trochę miłości do autorów lub opiekunów, tu jest jakiś kod uzyskać listę najczęściej nazwie autorów lub opiekunów, na podstawie wyjściu installed.packages(). (Jeśli chcesz ograniczyć go do pakietów używanych przez jakiś kod, sprawdź pakiet mvbutils i foodweb - można uzyskać szaleństwo i wyższą pozycję w zależności od częstotliwości połączeń lub czasu spędzonego, jeśli korzystasz z usługi Rprof.)

Niestety, ten kod nie podzieli ciągów na wiele nazw, więc współpraca jest traktowana jako 1 "osoba", prawdopodobnie z pominięciem pracy osób. Jeśli chcesz dokładną analizę, będziesz musiał wykonać trochę więcej pracy. :)

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) 

Oto przykład z jednego komputera; przepraszam za brzydkie, zasłonięte adresy e-mail. Powyższy kod tworzy poprawne adresy e-mail z pliku DESCRIPTION, ale je edytowałem.

Autorzy:

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 

Opiekunowie:

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

użycie

packageDescription("base") 

i czytać ...

+3

Lub tylko podzbiór 'packageDescription (" base ") $ Author' ;-) –

+0

Ponieważ' citation() 'jest oparta na pliku DESCRIPTION, w przypadku braku pliku cytowania, jest to poprawna odpowiedź. Uwaga: może być dobrze zastąpić 'base' specyficzną nazwą pakietu lub' pkg', aby inni uświadomili sobie ogólność tej odpowiedzi. – Iterator

13

Aby móc przytoczyć R lub pakiet, użyj citation.

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

Pokonaj mnie przez sekundę. :) –

+2

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

+0

Zapewnia również bardzo dobre odniesienie do bibTeX. –

9

Jakieś sprzątanie potrzebne, ale wpadłeś na pomysł. :)

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 mnie uprzedził, ale tutaj jest krótka droga od wydobycia niektórych informacji przy użyciu citation.

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

W komentarzach Hadley zasugerował inną metodę odczytu bezpośrednio z pliku DESCRIPTION.

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

Co jest fajnego w tej odpowiedzi, to że działa na odinstalowanych pakietach. –

+3

@BenBolker 'read.dcf (url (" http://cran.r-project.org/web/packages/ggdendro/DESCRIPTION "))' jest jeszcze ładniejszy. – hadley

+0

Dzięki, @Hadley! Jeśli nie masz nic przeciwko, dodaję to do powyższej odpowiedzi dla kompletności. –

Powiązane problemy