我发现 R 使用 lm() 时有一个奇怪的行为。
基于cars
对象,以下函数是在速度 30 时使用局部线性回归绘制拟合断裂距离。
func1 <- function(fm, spd){
w <- dnorm(cars$speed - spd, sd=5)
fit <- lm(formula = as.formula(fm), weights = w, data=cars)
plot(fitted(fit))
}
func2 <- function(fm, spd){
w <- dnorm(cars$speed - spd, sd=5)
fit <- lm(formula = fm, weights = w, data=cars)
plot(fitted(fit))
}
func1("dist ~ speed", 30)
func2(dist ~ speed, 30)
func1
作品。但func2
失败并显示以下消息:
Error in eval(expr, envir, enclos) : object 'w' not found
两个函数之间的唯一区别是func2
接收公式类作为参数。
以这种风格使用 R 的 lm() ,公式对象应该作为字符传递?
我用 R-3.2.1、RStudio 0.99.467、Windows7 对此进行了测试。