Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R帮助页作为对象_R_Cran - Fatal编程技术网

R帮助页作为对象

R帮助页作为对象,r,cran,R,Cran,是否有一种很好的方法可以从安装的包中以R对象(例如列表)的形式提取get-R-help页面。我希望以标准化JSON或XML模式的形式公开帮助页面。然而,从数据库获取R-help信息比我想象的要困难 我不久前拼凑起来,得到了一个R帮助手册页面的HTML。然而,我更希望有一个包含这些信息的通用R对象,我可以将其呈现为JSON/XML/HTML等。我查看了Hadley提供的helpr包,但这似乎有点过分了 您可以通过以下方式更轻松地执行此操作: getHTMLhelp <- function(.

是否有一种很好的方法可以从安装的包中以R对象(例如列表)的形式提取get-R-help页面。我希望以标准化JSON或XML模式的形式公开帮助页面。然而,从数据库获取R-help信息比我想象的要困难


我不久前拼凑起来,得到了一个R帮助手册页面的HTML。然而,我更希望有一个包含这些信息的通用R对象,我可以将其呈现为JSON/XML/HTML等。我查看了Hadley提供的
helpr
包,但这似乎有点过分了

您可以通过以下方式更轻松地执行此操作:

getHTMLhelp <- function(...){
    thefile <- help(...)
    capture.output(
      tools:::Rd2HTML(utils:::.getHelpFile(thefile))
    )
}
或:

>HelpGam头(HelpGam)
[1] ""      
[2] “R:广义加性混合模型”
[3] ""
[4] ""             
[5] ""                                                          
[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);
}

Rd2list但是有没有办法得到一个非HTML化的对象?应该在你的问题中指定。当你分析Rd时,我认为这就是你想要的。使用RD2Text将为您提供纯文本。只需获取文件(无需任何解析)即可获得原始Rd格式。如果要将其转换为列表,则必须编写自己的函数。我非常讨厌使用
match.call
和后续调用操作。“我认为只使用弦更好,”哈德利说,我想这是一个风格问题。这就是lm和许多其他功能的工作方式。另外,例如,如果R内核决定更改目录结构,它仍然可以工作。使用字符串操作会有点棘手。我的意思是你可以将你的函数写成
getHTMLHelp一个提示:去掉分号。说真的,放下它们。这是C代码,不是R代码。在R中,你不需要它们,除非你想在一行上放两个命令,我强烈建议你不要这样做。我喜欢它们。当我忘记关闭括号时,它们经常帮助我调试。
> 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));