Я создаю обертку вокруг lm
, чтобы выполнить некоторые дополнительные вычисления. Я хотел бы, чтобы обертка прошла ...
до lm
, но я столкнулся с проблемой lm
аргументом weights
.Проблема с Эллипсисом: Прохождение ... до lm
LmWrapper <- function(df, fmla, ...) {
est <- lm(fmla, df, ...)
list(model = est)
}
Если я называю обертку с аргументом веса,
data(airquality)
LmWrapper(airquality, Ozone ~ Wind, weights = Temp)
R не знает, где искать весов:
Error in eval(expr, envir, enclos) :
..1 used in an incorrect context, no ... to look in
lm
страница помощи говорит
Все
weights
,subset
иoffset
оцениваются так же, как переменные вformula
, то есть сначала вdata
, а затем в средеformula
.
но обертка, кажется, меняет ситуацию.
Как исправить это?
traceback()
для вышеуказанной ошибки выглядит следующим образом:
8: eval(expr, envir, enclos)
7: eval(extras, data, env)
6: model.frame.default(formula = fmla, data = df, weights = ..1,
drop.unused.levels = TRUE)
5: stats::model.frame(formula = fmla, data = df, weights = ..1,
drop.unused.levels = TRUE)
4: eval(expr, envir, enclos)
3: eval(mf, parent.frame())
2: lm(fmla, df, ...) at #2
1: LmWrapper(diamonds, price ~ carat, weights = depth)
Вызов lm
напрямую, работает просто отлично:
lm(Ozone ~ Wind, airquality, weights = Temp)