在R中,您可能已经估计了具有对数转换后的因变量的模型:
mfit <- lm(
formula = log(salary) ~ yrs.service + yrs.since.phd,
data = Salaries
)
Run Code Online (Sandbox Code Playgroud)
然后,您可能想要更改模型框架并调用更新以重新拟合模型:
n <- nrow(Salaries)
mfr <- model.frame(mfit)[sample(1:n, size=n, replace=TRUE),]
mfit2 <- update(mfit, data = mfr)
Run Code Online (Sandbox Code Playgroud)
这将导致错误:
Error in eval(expr, envir, enclos) : object 'salary' not found
Run Code Online (Sandbox Code Playgroud)
原因是公式仍然具有因变量,log(salary)并且模型框架中的变量称为log(salary)。R认为它可以找到salary然后调用log它。如果不重新采样,将发生相同的错误,该示例仅说明了为什么要这样做。
上面的过程来自引导程序包,在其中执行重采样行。这是预期的行为,还是错误?我知道可以通过转换数据参数中的变量来解决它,但这似乎很烦人并且被忽略了……
Joã*_*iel -1
我不认为这是一个错误。由于公式可以接收函数和运算符,即
log(foo)*3 ~ abs(fooller) + fooz
Run Code Online (Sandbox Code Playgroud)
它无法将调用的对象与带有参数abs(fooller)的函数的结果分开。abs()fooller
在我看来,这是一个命名约定的问题。您不应将变量或列命名为可能被误解为函数的名称。相反,你可以使用salary.log.