То, что вы можете использовать, называется function operator. Функциональный оператор принимает функцию как входную, добавляет немного функциональности и возвращает функцию.
Например, чтобы создать версию lm
что всегда сообщает о summary
:
tweak_lm = function(modify_function) {
function(...) {
result = lm(...)
print(modify_function(result))
result
}
}
summarized_lm = tweak_lm(summary)
lm_res = summarized_lm(mpg ~ wt, mtcars)
Call:
lm(formula = ..1, data = ..2)
Residuals:
Min 1Q Median 3Q Max
-4.5432 -2.3647 -0.1252 1.4096 6.8727
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 37.2851 1.8776 19.858 < 2e-16 ***
wt -5.3445 0.5591 -9.559 1.29e-10 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 3.046 on 30 degrees of freedom
Multiple R-squared: 0.7528, Adjusted R-squared: 0.7446
F-statistic: 91.38 on 1 and 30 DF, p-value: 1.294e-10
> lm_res
Call:
lm(formula = ..1, data = ..2)
Coefficients:
(Intercept) wt
37.285 -5.344
>
Используя этот подход позволяет создавать другие варианты этого:
coef_lm = tweak_lm(coef)
lm_res = coef_lm(mpg ~ wt, mtcars)
(Intercept) wt
37.285126 -5.344472
Это не совсем ясно, что вам нужно, но вы можете использовать этот подход.
Вы можете использовать 'fixInNamespace (« lm »,« stats »)', но, вероятно, более безопасно и более портативно писать свою собственную функцию, добавляя все, что вы хотите для вывода lm, и используя 'res_lm <- lm (model) res_lm < - myfunc (res_lm) ' – scoa
, если вы просто хотите видеть доверительный интервал с итоговым выходом, вы можете просто переопределить функцию print.lm:' print.lm <- function (x, ...) {print (summary (x)); cat («Доверительный интервал: \ n»); print (confint (x))} '; в противном случае вам придется написать оболочку для 'lm', которая вызывает' stats :: lm' и добавляет данные 'confint' в структуру' list', но при этом сохраняет класс 'lm'. Если вы не просто хотите использовать решение 'print.lm', предложение @ scoa не отменяет' lm' и делает вашу собственную функцию самым надежным и самым портативным. – hrbrmstr
ОК, возможно, это переопределение, это плохая идея, потому что другие функции также могут быть затронуты. Идея @hrbrmsts звучит хорошо. Каков наилучший способ сделать его постоянным? Есть ли новые функции для будущих сессий R ?. В любом случае я хочу изменить несколько R-функций, чтобы имитировать вывод Sata, потому что мой босс, как они. – skan