我使用 lm() 发现了 R 的奇怪行为。
基于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)
Run Code Online (Sandbox Code Playgroud)
func1作品。但func2失败并显示以下消息:
Error in eval(expr, envir, enclos) : object 'w' not found
Run Code Online (Sandbox Code Playgroud)
两个函数之间的唯一区别是func2接收公式类作为参数。
以这种风格使用 R 的 …