R 函数内部无法识别的数据

Data not recognized inside the function in R

我想知道为什么我的 data123 在下面的 allEffects(fit2, ...) 调用中没有被识别?有解决办法吗?

我的“R版本4.0.0(2020-04-24)”,windows 10台机器。

Error object 'data123' not found

library(effects)

m1 <- lm(mpg ~ hp + cyl, data = mtcars)


foo <- function(fit,...) {
   
   data123 <- eval(fit$call$data)
   
   fit2 <- lm(fit$call$formula, data = data123)
      
   allEffects(fit2, ...)   #### 'data123' not recognized HERE  
}   
#----------EXAMPLE OF USE:
foo(m1)

# Error during wrapup: object 'data123' not found

allEffects函数对环境非常挑剔。您需要确保要使用的数据集与您用于模型的公式处于相同的环境中。尝试

foo <- function(fit,...) {
  
  data123 <- eval(fit$call$data)
  formula123 <- eval(fit$call$formula)
  environment(formula123) <- environment()
  
  fit2 <- lm(formula123, data = data123)
  
  allEffects(fit2, ...) 
}   
foo(m1)

这里我们显式提取公式并将其环境重置为定义 data123 的函数体。