Как определить автора пакета R?

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

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

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

references("base")

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

Ответы

Ответ 1

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

Распространяется с каждым пакетом - файл DESCRIPTION. Необязательно, сопровождающий может включать файл 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.

И фрагмент из информации DESCRIPTION:

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

Обратите внимание, что перечисленные авторы участвовали в разных промежутках времени, но если вам нужна помощь сегодня, вы должны отправить по электронной почте [email protected]

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


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

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

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

Ответ 2

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

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

Ответ 3

использовать

packageDescription("base")

и читать...

Ответ 4

Некоторая очистка нужна, но вы получите эту идею.:)

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 <[email protected]>"

В комментариях Хэдли предложил другой метод чтения прямо из файла DESCRIPTION.

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