【发布时间】:2017-11-07 11:50:48
【问题描述】:
我正在关注此 R Bloggers link 的代码,以便使用 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呢? -
@mt1022,是的,似乎可以。我在
.$上有点过火了。我想这仅在y参数上需要,因为model.matrix已经获得了data = .参数。随时发布作为答案。
标签: r dplyr tidyr glmnet purrr