вывод модели map () на информационный фрейм - PullRequest
0 голосов
/ 27 октября 2019

Я использую map() для вычисления и извлечения определенной статистики из нескольких lm() моделей.

Чтобы дать воспроизводимый пример, используя набор данных mtcars, я начну с входного вектора формул дляоценивать с использованием lm() моделей:

library(tidyverse)
df <- mtcars
input_char <- c("mpg ~ disp",
                "mpg ~ disp + hp")
input_formula <- map(input_char, formula)

Затем я получил функцию, которая вычисляет и извлекает соответствующую статистику для каждой модели. Для простоты и воспроизводимости, вот упрощенная функция, которая просто извлекает R-квадрат модели.

get_rsquared <- function(a_formula) {
  model1 <- lm(a_formula, data = df)
  rsquared <- summary(model1)$r.squared
  c(model = a_formula, rsquared = rsquared)
}

Затем я использовал map, чтобы перебрать формулы и извлечь R-квадрат из каждогомодель.

models <- map(input_formula, get_rsquared)
models

, который дает вывод:

[[1]]
[[1]]$model
mpg ~ disp
<environment: 0x7f98987f4000>

[[1]]$rsquared
[1] 0.7183433


[[2]]
[[2]]$model
mpg ~ disp + hp
<environment: 0x7f98987f4000>

[[2]]$rsquared
[1] 0.7482402

Мой вопрос касается вывода в виде списка.

Есть ли простой способ сделать вывод кадром данных?

Мой желаемый результат:


#>             model  rsquared
#> 1      mpg ~ disp 0.7183433
#> 2 mpg ~ disp + hp 0.7482402

1 Ответ

1 голос
/ 27 октября 2019

Сохраняйте формулы как строки символов и используйте as.formula() как часть функции get_rsquared(), так как с ними легче работать как строки символов, чем объекты формул.

library(purrr)
library(dplyr)

df <- mtcars
input_char <- c("mpg ~ disp",
                "mpg ~ disp + hp")

get_rsquared <- function(a_formula) {
  model1 <- lm(as.formula(a_formula), data = df)
  rsquared <- summary(model1)$r.squared
  list(model = a_formula, rsquared = rsquared)
}

map_df(input_char, get_rsquared)

# A tibble: 2 x 2
  model           rsquared
  <chr>              <dbl>
1 mpg ~ disp         0.718
2 mpg ~ disp + hp    0.748
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...