R帮助页面作为对象

时间:2012-01-18 22:57:54

标签: r cran

是否有一种很好的方法可以以R对象(例如列表)的形式从已安装的软件包中提取R-help页面。我想以标准化的JSON或XML模式的形式公开帮助页面。但是从DB获取R-help信息比我想象的要难。

前一段时间我一起修剪了R帮助手册页的HTML。但是我宁愿有一个包含这些信息的通用R对象,我可以渲染到JSON / XML / HTML等。我查看了Hadley的helpr包,但这似乎有点过分了。我的目的。

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:2)

所以低于我一起攻击的内容。但是,我还需要在许多帮助文件上对其进行测试,以确定它是否通常有效。

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));