Использование имени информационного кадра в качестве столбца в таблице модели - PullRequest
0 голосов
/ 16 мая 2018

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

library(tidyverse)
library(rlang)

set.seed(666)
df1 <- tibble(
  x = 1:10 + rnorm(10),
  y = seq(20, 38, by=2) + rnorm(10),
  z = 2*x + 3*y
)

df2 <- tibble(
  x = 1:10 + rnorm(10),
  y = seq(20, 38, by=2) + rnorm(10),
  z = 4*x + 5*y
)

results <- tibble(dataset = c('df1','df2'))

Обратите внимание, что следующие все работают:

lm(z ~ x + y, data=df1)
lm(z ~ x + y, data=df2)
lm(z ~ x + y, data=eval(sym('df1')))

Но когда я попробую следующее:

results <- results %>% mutate(model = lm(z ~ x + y, data = eval(sym(dataset))))

Я получаю ошибку

Error in mutate_impl(.data, dots) : 
  Evaluation error: Only strings can be converted to symbols.

Может кто-нибудь выяснить, как заставить это работать?

1 Ответ

0 голосов
/ 17 мая 2018

Мы можем использовать функцию map и указать функцию lm следующим образом.

library(tidyverse)
library(rlang)

results2 <- results %>% 
  mutate(model = map(dataset, ~lm(z ~ x + y, data = eval(sym(.)))))

results2
# # A tibble: 2 x 2
#   dataset model   
#   <chr>   <list>  
# 1 df1     <S3: lm>
# 2 df2     <S3: lm>

results2$model[[1]]
# Call:
#   lm(formula = z ~ x + y, data = eval(sym(.)))
# 
# Coefficients:
# (Intercept)            x            y  
#   6.741e-14    2.000e+00    3.000e+00

results2$model[[2]]
# Call:
#   lm(formula = z ~ x + y, data = eval(sym(.)))
# 
# Coefficients:
# (Intercept)            x            y  
#   9.662e-14    4.000e+00    5.000e+00 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...