Страница справки R как объект - PullRequest
7 голосов
/ 19 января 2012

Есть ли хороший способ извлечь страницу получения справки R из установленного пакета в виде объекта R (например, списка). Я хотел бы представить справочные страницы в виде стандартизированных схем JSON или XML. Однако получить информацию о R-справке из БД сложнее, чем я думал.

Я взломал некоторое время назад, чтобы получить HTML-код справочной страницы по R. Однако я предпочел бы иметь общий объект R, который содержит эту информацию, который я могу рендерить в JSON / XML / HTML и т. Д. Я посмотрел на пакет helpr от Хэдли, но для моей цели это немного излишне. .

Ответы [ 2 ]

5 голосов
/ 19 января 2012

Отредактировано с предложением Хэдли

Вы можете сделать это немного проще:

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] ""           
2 голосов
/ 24 января 2012

Так что ниже того, что я взломал вместе. Однако мне еще предстоит проверить его на многих файлах справки, чтобы проверить, работает ли он в целом.

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