我在列表中有几个公式:
formulas <- list(
mpg ~ disp,
mpg ~ I(1 / disp),
mpg ~ disp + wt,
mpg ~ I(1 / disp) + wt
)
列名取自mtcars
。我想知道为什么在下面的代码中R找不到对象mpg
:
lapply(formulas, function(f) with(mtcars, lm(formula = f))) # (1)
错误是:Error in eval(expr, envir, enclos) : object 'mpg' not found
然而这可行
with(mtcars, lm(mpg ~ disp))` # (2)
但是当我尝试从列表中提取任何公式时:
with(mtcars, lm(formulas[[1]])) # (3)
R抱怨同样的错误:Error in eval(expr, envir, enclos) : object 'mpg' not found
。令人惊讶的是,当我将mtcars
附加到全局环境attach(mtcars)
时,表达式(3)
可以正常工作。
我虽然误解了with()
,但是当我运行
with(mtcars, mpg)
我得到了正确的结果:
[1] 21.0 21.0 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 17.8 16.4 17.3 15.2 10.4 10.4 14.7 32.4 30.4 33.9 21.5 15.5 15.2 13.3 19.2 27.3 26.0 30.4 15.8 19.7 15.0 21.4
答案 0 :(得分:3)
一种选择是在data
电话
lm
lst <- lapply(formulas, function(f) lm(formula = f, data=mtcars))
lst[[1]]
#Call:
#lm(formula = f, data = mtcars)
#Coefficients:
#(Intercept) disp
# 29.59985 -0.04122