Как определить автора пакета R? - PullRequest
14 голосов
/ 17 февраля 2012

Как я могу определить, кто является авторами пакета? Учитывая, что у нас есть эта широко используемая кодовая база, я считаю уместным сделать ссылку на программное обеспечение, которое я использую в своем анализе.

Есть ли способ программно получить информацию об авторе и любой другой соответствующей информации?

В псевдокоде я хочу сделать следующее:

references("base")

Как я могу это сделать?

Ответы [ 4 ]

13 голосов
/ 17 февраля 2012

Чтобы иметь возможность цитировать R или пакет, используйте citation.

citation()        #for base packages or R itself
citation("nlme")
10 голосов
/ 17 февраля 2012

используйте

packageDescription("base")

и читайте ...

9 голосов
/ 17 февраля 2012

Поскольку другие опубликовали функции, а не объяснения, я заполню это.

В каждую упаковку распространяется файл ОПИСАНИЕ. При желании сопровождающий может включать файл CITATION.

Функция citation(pkgName) (где pkgName - строка символов) будет сначала искать файл CITATION, а затем файл DESCRIPTION. Если первый найден, он представит содержимое этого файла. Если последнее, он автоматически сгенерирует вывод BibTeX на основе полей в файле DESCRIPTION. Этот вывод может потребовать некоторой дополнительной ревизии, поэтому будьте осторожны перед использованием содержимого непосредственно в цитате.

Чтобы просмотреть описание пакета, packageDescription(pkgName) сделает свое дело. Это вернет список элементов, каждый из которых основан на поле из файла DESCRIPTION. Это ваш лучший выбор, если вы хотите программно работать с этим содержимым.

Одна из ключевых проблем заключается в том, что автор (ы) пакета и сопровождающий (и) пакета могут не совпадать. Если вам нужна помощь с пакетом, вы должны связаться с сопровождающим (и). Примером является nlme. Сначала отрывок из информации о цитате:

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

И фрагмент из ОПИСАНИЯ 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 <R-core@R-project.org>

Обратите внимание, что перечисленные авторы участвовали в разных интервалах, но, если вам нужна помощь сегодня, вы отправите письмо по адресу R-core@R-project.org.

Наконец, поскольку сопровождающие могут создавать свой собственный файл CITATION, информация CITATION не обязательно должна быть подмножеством информации DESCRIPTION. Примером является citation("base"), который включает, помимо прочего, запись ISBN, которой нет в выводе packageDescription("base").


Обновление 1. Если вы хотите проявить некоторую любовь к авторам или сопровождающим, вот некоторый код, получающий список наиболее часто именуемых авторов или сопровождающих, основанный на выводе installed.packages(). (Если вы хотите ограничить его пакетами, используемыми каким-либо кодом, посмотрите пакет mvbutils и функцию foodweb - можно сойти с ума и получить более высокий рейтинг по частоте вызовов или затраченному времени, если вы используете Rprof.)

К сожалению, этот код не разбивает строки на несколько имен, поэтому совместная работа рассматривается как 1 «человек», возможно, недооценивая работу отдельных людей. Если вы хотите тщательного анализа, вам придется сделать немного больше работы. :)

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)

Вот пример с одного компьютера; извинения за уродливые скрытые адреса электронной почты. Приведенный выше код выдает правильные адреса электронной почты из файла DESCRIPTION, но я их отредактировал.

Авторы:

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

Сопровождающие:

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
9 голосов
/ 17 февраля 2012

Необходима некоторая очистка, но вы поняли идею.:)

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

Ричи опередил меня, но вот краткий способ извлечения некоторой информации с использованием citation.

citation("ggdendro")$author
[1] "Andrie de Vries <XXXXX@XXXXX.com>"

В комментариях Хэдли предложил другой метод чтения прямоиз файла ОПИСАНИЕ.

> gg <- read.dcf(url("http://cran.r-project.org/web/packages/ggdendro/DESCRIPTION"))
> gg[, "Maintainer"]
                           Maintainer 
"Andrie de Vries <xxxxx@xxxxx.com>"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...