我想通过一个软件包,发现每个函数的帮助文件中提到的作者是谁.
我找了一个从R的帮助文件中提取元素的函数,可以找到一个.我能找到的最接近的是这篇帖子,来自Noam Ross.
这样的功能存在吗?(如果没有,我想我会破解Noam的代码以解析Rd文件,并找到我感兴趣的特定元素).
谢谢,塔尔.
潜在的代码示例:
get_field_from_r_help(topic="lm", field = "Description") #
# output:
Run Code Online (Sandbox Code Playgroud)
'lm'用于拟合线性模型.它可用于进行回归,方差的单层分析和协方差分析(尽管'aov'可为这些提供更方便的界面).
该文件由邓肯默多克解析Rd文件会有所帮助,如将这一SO发布.
从这些,您可能会尝试类似以下内容:
getauthors <- function(package){
db <- tools::Rd_db(package)
authors <- lapply(db,function(x) {
tags <- tools:::RdTags(x)
if("\\author" %in% tags){
# return a crazy list of results
#out <- x[which(tmp=="\\author")]
# return something a little cleaner
out <- paste(unlist(x[which(tags=="\\author")]),collapse="")
}
else
out <- NULL
invisible(out)
})
gsub("\n","",unlist(authors)) # further cleanup
}
Run Code Online (Sandbox Code Playgroud)
然后我们可以在一两个包上运行它:
> getauthors("knitr")
d:/RCompile/CRANpkg/local/3.0/knitr/man/eclipse_theme.Rd
" Ramnath Vaidyanathan"
d:/RCompile/CRANpkg/local/3.0/knitr/man/image_uri.Rd
" Wush Wu and Yihui Xie"
d:/RCompile/CRANpkg/local/3.0/knitr/man/imgur_upload.Rd
" Yihui Xie, adapted from the imguR package by Aaron Statham"
d:/RCompile/CRANpkg/local/3.0/knitr/man/knit2pdf.Rd
" Ramnath Vaidyanathan, Alex Zvoleff and Yihui Xie"
d:/RCompile/CRANpkg/local/3.0/knitr/man/knit2wp.Rd
" William K. Morris and Yihui Xie"
d:/RCompile/CRANpkg/local/3.0/knitr/man/knit_theme.Rd
" Ramnath Vaidyanathan and Yihui Xie"
d:/RCompile/CRANpkg/local/3.0/knitr/man/knitr-package.Rd
" Yihui Xie <http://yihui.name>"
d:/RCompile/CRANpkg/local/3.0/knitr/man/read_chunk.Rd
" Yihui Xie; the idea of the second approach came from Peter Ruckdeschel (author of the SweaveListingUtils package)"
d:/RCompile/CRANpkg/local/3.0/knitr/man/read_rforge.Rd
" Yihui Xie and Peter Ruckdeschel"
d:/RCompile/CRANpkg/local/3.0/knitr/man/rst2pdf.Rd
" Alex Zvoleff and Yihui Xie"
d:/RCompile/CRANpkg/local/3.0/knitr/man/spin.Rd
" Yihui Xie, with the original idea from Richard FitzJohn (who named it as sowsear() which meant to make a silk purse out of a sow's ear)"
Run Code Online (Sandbox Code Playgroud)
也许工具:
> getauthors("tools")
D:/murdoch/recent/R64-3.0/src/library/tools/man/bibstyle.Rd
" Duncan Murdoch"
D:/murdoch/recent/R64-3.0/src/library/tools/man/checkPoFiles.Rd
" Duncan Murdoch"
D:/murdoch/recent/R64-3.0/src/library/tools/man/checkRd.Rd
" Duncan Murdoch, Brian Ripley"
D:/murdoch/recent/R64-3.0/src/library/tools/man/getDepList.Rd
" Jeff Gentry "
D:/murdoch/recent/R64-3.0/src/library/tools/man/HTMLlinks.Rd
"Duncan Murdoch, Brian Ripley"
D:/murdoch/recent/R64-3.0/src/library/tools/man/installFoundDepends.Rd
"Jeff Gentry"
D:/murdoch/recent/R64-3.0/src/library/tools/man/makeLazyLoading.Rd
"Luke Tierney and Brian Ripley"
D:/murdoch/recent/R64-3.0/src/library/tools/man/parse_Rd.Rd
" Duncan Murdoch "
D:/murdoch/recent/R64-3.0/src/library/tools/man/parseLatex.Rd
"Duncan Murdoch"
D:/murdoch/recent/R64-3.0/src/library/tools/man/Rd2HTML.Rd
" Duncan Murdoch, Brian Ripley"
D:/murdoch/recent/R64-3.0/src/library/tools/man/Rd2txt_options.Rd
"Duncan Murdoch"
D:/murdoch/recent/R64-3.0/src/library/tools/man/RdTextFilter.Rd
" Duncan Murdoch"
D:/murdoch/recent/R64-3.0/src/library/tools/man/SweaveTeXFilter.Rd
"Duncan Murdoch"
D:/murdoch/recent/R64-3.0/src/library/tools/man/texi2dvi.Rd
" Originally Achim Zeileis but largely rewritten by R-core."
D:/murdoch/recent/R64-3.0/src/library/tools/man/tools-package.Rd
" Kurt Hornik and Friedrich Leisch Maintainer: R Core Team R-core@r-project.org"
D:/murdoch/recent/R64-3.0/src/library/tools/man/vignetteDepends.Rd
" Jeff Gentry "
D:/murdoch/recent/R64-3.0/src/library/tools/man/vignetteEngine.Rd
"Duncan Murdoch and Henrik Bengtsson."
D:/murdoch/recent/R64-3.0/src/library/tools/man/writePACKAGES.Rd
" Uwe Ligges and R-core."
Run Code Online (Sandbox Code Playgroud)
有些函数没有作者字段,所以这只会在它unlist
结束时调用它们getauthors
,但代码可以稍微修改以返回NULL
那些值.
此外,进一步解析将变得有点困难,因为包作者似乎以非常不同的方式使用该字段.devtools中只有一个作者字段.车上有一堆,每个都包含一个电子邮件地址.等等,但这会让您获得可用的信息,您应该可以进一步使用.
注意:如果您拥有Rd文件的完整路径,我的此答案的先前版本提供了一个解决方案,但如果您尝试对已安装的软件包执行此操作则不起作用.按照Tyler的建议,我已经找到了一个更完整的解决方案.