如何确定包裹的作者是谁?鉴于我们拥有这个广泛使用的代码库,我认为我可以参考我在分析中使用的软件。
有没有办法以编程方式检索作者和任何其他相关信息?
在伪代码中,我想执行以下操作:
references("base")
我该怎么做?
答案 0 :(得分:13)
为了能够引用R或包,请使用citation
。
citation() #for base packages or R itself
citation("nlme")
答案 1 :(得分:10)
使用
packageDescription("base")
并阅读......
答案 2 :(得分:9)
需要一些清洁,但你明白了。 :)
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打败了我,但这是使用citation
提取一些信息的简短方法。
citation("ggdendro")$author
[1] "Andrie de Vries <XXXXX@XXXXX.com>"
在评论中,Hadley提出了另一种直接从DESCRIPTION文件中阅读的方法。
> gg <- read.dcf(url("http://cran.r-project.org/web/packages/ggdendro/DESCRIPTION"))
> gg[, "Maintainer"]
Maintainer
"Andrie de Vries <xxxxx@xxxxx.com>"
答案 3 :(得分:9)
由于其他人已发布功能而非解释,我将填写此内容。
每个包分发的是一个描述文件。可选地,维护者可以包括CITATION文件。
citation(pkgName)
(其中pkgName
是一个字符串)函数将首先查找CITATION文件,然后查找DESCRIPTION文件。如果找到前者,它将显示该文件的内容。如果是后者,它将根据DESCRIPTION文件中的字段自动生成BibTeX输出。此输出可能需要一些额外的修订,因此在引用中直接使用内容之前要小心。
为了查看包描述,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 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