model.frame和更新

Ste*_*fan 5 r formula lm

在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.