R: Форматированный вывод из biglm

#r

#r

Вопрос:

Есть ли способ получить красиво отформатированный вывод summary (biglm)? R2HTML, который очень хорошо работает для summary (lm), вообще не сохраняет форматирование.

 library(biglm)
library(R2HTML)
d <- data.frame(x=runif(100),y=runif(100))
L <- lm(y~x,data=d)
LL <- biglm(y~x,data=d)
HTML(summary(L),file="tmp1.html")
HTML(summary(LL),file="tmp2.html")
  

HTML-файл tmp1.html имеет красивое форматирование: HTML-файл tmp2.html содержит «необработанные» выходные данные из summary.biglm()

Комментарии:

1. воспроизводимый пример помог бы

2. Синтаксис для biglm точно такой же, как у lm: model = lm(Y ~ X, data =MyData) — просто замените lm на biglm. В то время как R2HTML прекрасно выводит сводку для lm с помощью library (R2HTML); HTML (model, file =»filepath»), все форматирование теряется, когда я использую biglm вместо lm.

Ответ №1:

Для того, чтобы выяснить, что здесь происходит, вам нужно немного покопаться в методах. HTML это универсальная функция, поэтому она ищет конкретную функцию, которую она может использовать для конкретного объекта, на основе его класса. Результаты summary(lm(...)) имеют класс summary.lm ; эквивалент для biglm является (что неудивительно) summary.biglm . Если вы запустите

 methods("HTML")
  

вы увидите все методы, определенные для HTML ; у большинства из них есть звездочки после их имен, что указывает на то, что они скрыты в пространстве имен R2HTML пакета. Чтобы увидеть метод для класса, foo который вам нужен R2HTML:::foo . Есть R2HTML:::HTML.summary.lm функция, но нет соответствующей HTML.summary.biglm функции, поэтому вызов HTML(summary(LL)) (где LL является biglm объектом) возвращается к R2HTML:::HTML.default функции, которая просто фиксирует вывод в довольно сыром виде.

Если бы вам повезло, и внутренние структуры summary.lm и summary.biglm были бы достаточно похожи, вы могли бы просто сказать HTML.summary.biglm <- R2HTML:::HTML.summary.lm и покончить с этим, но это не работает, потому что внутренние структуры summary.lm и summary.biglm слишком разные.

Следующее, что нужно сделать, это сбросить определение R2HTML:::HTML.summary.lm и проработать его изнутри, изменяя его соответствующим образом (например, для первого прохождения: используйте dput() для сброса R2HTML:::HTML.summary.lm в файл; добавьте немного кода в начало файла, чтобы определить HTML.summary.biglm как эту функцию; попробуйте HTML(summary(LL)) определить, где вы столкнулись с ошибкой (возможно, используя debug() для отслеживания); исправьте соответствующую часть файла; повторяйте до завершения.

Одна из проблем заключается в том, что некоторые различия между внутренними структурами summary.lm и summary.biglm являются не просто косметическими, а являются отличиями в дизайне — например, summary.lm включает копию остатков (try names(summary(L)) или str(summary(L)) where L lm подходит), что просто не имеет смысла для biglm объекта. (Это краткий способ сказать, что в конечном итоге это оказалось слишком большой работой для меня, чтобы взять на себя быстрый ответ на вопрос SO …)

Удачи …