Страница справки R как объект

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

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

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

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

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

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] ""           
Другие вопросы по тегам