Я использую код по этой ссылке R Bloggers. чтобы запускать модели в группах в моих данных, используя tidyr
и purrr
. Однако я хотел бы использовать glmnet
, а не просто lm
для вложенных данных. В отличие от lm
, glmnet
/cv.glmnet
принимает model.matrix
в качестве аргумента x
, и мне нужно абстрагировать формулу, переданную этому model.matrix
, и это то, что меня удерживает.
Итак, это работает:
library(purrr)
library(tidyr)
library(dplyr)
library(glmnet)
mod_test <- mtcars %>%
nest(-vs) %>%
mutate(cv_mod = map(data, ~ cv.glmnet(
x = model.matrix(data = ., .$mpg ~ .$cyl * .$hp)[,-1],
y = .$mpg
)))
mod_test
> mod_test
# A tibble: 2 x 3
vs data cv_mod
<dbl> <list> <list>
1 0 <tibble [18 x 10]> <S3: cv.glmnet>
2 1 <tibble [14 x 10]> <S3: cv.glmnet>
Но когда я пытаюсь создать формулу для model.matrix
отдельно, это не так.
mod_form <- as.formula(".$mpg ~ .$cyl * .$hp")
mod_test2 <- mtcars %>%
nest(-vs) %>%
mutate(cv_mod = map(data, ~ cv.glmnet(
x = model.matrix(data = ., mod_form)[,-1],
y = .$mpg
)))
Error in mutate_impl(.data, dots) : object '.' not found
mod_form <- mpg ~ cyl * hp
? - person mt1022   schedule 06.06.2017.$
. Я предполагаю, что это необходимо только для аргументаy
, потому чтоmodel.matrix
уже получает аргументdata = .
. Не стесняйтесь публиковать в качестве ответа. - person Nick Criswell   schedule 06.06.2017