Данные, не распознанные внутри функции в R

#r #dataframe #function #eval

Вопрос:

Интересно, почему мой data123 не распознается внутри allEffects(fit2, ...) вызова ниже? Есть ли в этом какое-то решение?

Моя «Версия R 4.0.0 (2020-04-24)», машина с Windows 10.

Error object 'data123' not found

 library(effects)  m1 lt;- lm(mpg ~ hp   cyl, data = mtcars)   foo lt;- function(fit,...) {    data123 lt;- eval(fit$call$data)    fit2 lt;- lm(fit$call$formula, data = data123)    allEffects(fit2, ...) #### 'data123' not recognized HERE  }  #----------EXAMPLE OF USE: foo(m1)  # Error during wrapup: object 'data123' not found  

Ответ №1:

allEffects Функция очень требовательна к окружающей среде. Вам необходимо убедиться, что набор данных, который вы хотите использовать, находится в той же среде, что и формула, используемая для модели. Попробуй

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

Здесь мы явно извлекаем формулу и сбрасываем ее окружение в тело функции, которое data123 определено.