«Недопустимая формула» в функции dplyr мутирует для линейной регрессии по строкам() во фрейме данных с несколькими моделями. Откуда берется эта ошибка?

#r #tidyverse #dplyr #lm

Вопрос:

Я видел статью в «К науке о данных» о классной технике для запуска нескольких линейных регрессий с использованием функций из пакетов dplyr и broom с фреймом данных, состоящим из формул модели. Я попробовал это сначала с моими собственными данными, но безрезультатно, поэтому я скопировал пример прямо из поста и получил ту же ошибку! Вы можете посмотреть сообщение здесь: https://towardsdatascience.com/five-things-you-never-knew-you-could-do-with-dplyr-1b634c0ea745

Вот код из поста с использованием набора данных mtcars пакета cars.

 # create a column with model formulas to test
models <- data.frame(
  formula = c(
    "mpg ~ cyl",
    "mpg ~ cyl   disp",
    "mpg ~ cyl   disp   hp",
    "mpg ~ cyl   disp   hp   drat"
  )
)
# run them all and get fit statistics
models %>%
  dplyr::rowwise() %>%
  dplyr::mutate(
    broom::glance(lm(formula, mtcars))
  )
 

Ошибка, которую я получаю, заключается в:

 Error: Problem with `mutate()` input `..1`.
x invalid formula
ℹ Input `..1` is `broom::glance(lm(formula, mtcars))`.
ℹ The error occured in row 1.
Run `rlang::last_error()` to see where the error occurred.
> rlang::last_error()
<error/dplyr_error>
Problem with `mutate()` input `..1`.
x invalid formula
ℹ Input `..1` is `broom::glance(lm(formula, mtcars))`.
ℹ The error occured in row 1.
Backtrace:
  1. dplyr::rowwise(.)
  9. dplyr::mutate(., broom::glance(lm(formula, mtcars)))
 11. dplyr:::mutate_cols(.data, ...)
 

Я прекрасно вижу модель в кадре данных. И я также могу просматривать данные по строкам (). Я попытался перезапустить сеанс R и загрузить только пакеты dplyr, broom и cars, чтобы проверить, нет ли проблем с маскировкой (которых не должно быть, так как я все равно вызываю функции напрямую…).

Я попытался использовать mutate_at(), потому что я знаю, что отправка строк через функции иногда может быть проблематичной в tidyverse, и я получил эту ошибку:

 > # run them all and get fit statistics
> models %>%
    dplyr::rowwise() %>%
    dplyr::mutate_at(
      broom::glance(lm(formula, mtcars))
    )
Error: object of type 'closure' is not subsettable
 

Единственная проблема связана с мутацией, но, похоже, она работает просто отлично, поскольку она закодирована здесь для автора статьи.
Любые идеи о том, что происходит, будут высоко оценены!

РЕДАКТИРОВАТЬ: Версия RStudio 1.4 Версии пакетов: dplyr — 1.0.5, tidyverse — 1.3.0, метла — 0.7.5

Комментарии:

1. Пожалуйста, проверьте packageVersion('dplyr') , работает ли это для меня с 1.0.4. Может быть, в вашем коде, заверните broom::glance(lm(formula, mtcars) в list

2. @IRTFM ты не можешь? Я использую Rstudio 1.4, у меня версия dplyr 1.0.5, но все остальные упомянутые версии пакетов одинаковы. Я попытался обернуть список, и я все еще получаю ту же ошибку

3. Мое прочтение описания пакета tidyverse 1.3.0 состоит в том, что в нем есть гораздо более поздняя версия dplyr. cran.r-project.org/web/packages/tidyverse/index.html