有没有一种很好的方法可以从已安装的包中以 R 对象(例如列表)的形式提取 R 帮助页面。我想以标准化 JSON 或 XML 模式的形式公开帮助页面。然而,从数据库中获取 R-help 信息比我想象的要难。
不久前,我一起破解了 R 帮助手册页的 HTML。但是,我宁愿拥有一个包含此信息的通用 R 对象,我可以将其渲染为 JSON/XML/HTML 等。我查看了helpr
Hadley 的包,但这对于我的目的来说似乎有点矫枉过正。
编辑哈德利的建议
您可以通过以下方式更轻松地做到这一点:
getHTMLhelp <- function(...){
thefile <- help(...)
capture.output(
tools:::Rd2HTML(utils:::.getHelpFile(thefile))
)
}
使用tools:::Rd2txt
而不是tools:::Rd2HTML
会给你纯文本。只需获取文件(无需任何解析)即可为您提供原始 Rd 格式,因此您可以编写自定义解析函数以将其解析为对象(请参阅@Jeroen 的解决方案,它在将所有信息提取到列表中做得很好)。
此函数采用与文件完全相同的参数help()
并返回一个向量,其中每个元素都是文件中的一行,例如:
> head(HelpAnova)
[1] "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">"
[2] "<html><head><title>R: Anova Tables</title>"
[3] "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">"
[4] "<link rel=\"stylesheet\" type=\"text/css\" href=\"R.css\">"
[5] "</head><body>"
[6] ""
或者 :
> HelpGam <- getHTMLhelp(gamm,package=mgcv)
> head(HelpGam)
[1] "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">"
[2] "<html><head><title>R: Generalized Additive Mixed Models</title>"
[3] "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">"
[4] "<link rel=\"stylesheet\" type=\"text/css\" href=\"R.css\">"
[5] "</head><body>"
[6] ""
所以低于我一起破解的内容。但是,我还必须在许多帮助文件上对其进行测试,以查看它是否通常有效。
Rd2list <- function(Rd){
names(Rd) <- substring(sapply(Rd, attr, "Rd_tag"),2);
temp_args <- Rd$arguments;
Rd$arguments <- NULL;
myrd <- lapply(Rd, unlist);
myrd <- lapply(myrd, paste, collapse="");
temp_args <- temp_args[sapply(temp_args , attr, "Rd_tag") == "\\item"];
temp_args <- lapply(temp_args, lapply, paste, collapse="");
temp_args <- lapply(temp_args, "names<-", c("arg", "description"));
myrd$arguments <- temp_args;
return(myrd);
}
getHelpList <- function(...){
thefile <- help(...)
myrd <- utils:::.getHelpFile(thefile);
Rd2list(myrd);
}
然后你会做类似的事情:
myhelp <- getHelpList("qplot", package="ggplot2");
cat(jsonlite::toJSON(myhelp));