Страница справки 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] ""