【发布时间】:2021-09-06 02:41:12
【问题描述】:
我正在尝试为lm() 构建一个带有点... 的包装器,但取得了部分成功。它仅适用于前两个 formula= 和 data= 参数。但是对于随后的每个参数,它似乎都不起作用并引发错误。
我对函数中lm() 的结果所做的不是问题的原因。它似乎只与使用点有关。所以我能够在这个 MWE 中找出问题:
lm_fun <- function(...) {
lm(...)
# <some other stuff>
}
lm_fun(formula=mpg ~ hp, data=mtcars)
## works fine
mtcars$w <- runif(nrow(mtcars)) ## adding weights
lm_fun(formula=mpg ~ hp, data=mtcars, weights=w)
# Error in eval(substitute(subset), data, env) :
# ..3 used in an incorrect context, no ... to look in
lm_fun(formula=mpg ~ hp, data=mtcars, subset=am == 1)
# Error in eval(substitute(subset), data, env) :
# ..3 used in an incorrect context, no ... to look in
lm_fun(formula=mpg ~ hp, data=mtcars, subset=am == 1, weights=w)
# Error in eval(extras, data, env) :
# ..4 used in an incorrect context, no ... to look in
这似乎是与that question 不同的问题,因为我在函数调用中提供了完整的参数集,并且没有在函数中添加任何内容。
我错过了什么吗?这种行为的原因是什么,我怎样才能让它正常工作?
编辑
@user63230 提供了一个nice workaround below。但是,它不适用于 lapply,这对我的需求很重要。
lm_fun2 <- function(...) eval(substitute(lm(...)))
fo <- c(mpg ~ hp, mpg ~ am)
lapply(fo, lm_fun, data=mtcars)
# works
lapply(fo, lm_fun2, data=mtcars)
# Error in stats::model.frame(formula = X[[i]], data = mtcars, drop.unused.levels = TRUE) :
# object 'X' not found
【问题讨论】:
标签: function syntax arguments lm