#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 …)
Удачи …