【发布时间】:2021-04-16 15:52:58
【问题描述】:
我正在尝试使用嵌套 data.frame 和 map mutate 方法运行分层分析,以拟合特定层中略有不同的模型:
cars_nest <- mtcars %>%
group_by(cyl) %>%
nest()
model1 <- function(df) {
lm(mpg ~ disp + wt, data = df)
}
model2 <- function(df) {
lm(mpg ~ disp + wt + factor(vs), data = df)
}
cars_nest %>%
mutate(
model = case_when(
cyl == 8 ~ map(data, model1),
cyl %in% c(4, 6) ~ map(data, model2)
)
)
我收到了错误
错误:
mutate()输入model有问题。 x 对比只能应用于具有 2 个或更多水平的因子 ℹ 输入model是case_when(...)。 ℹ 错误发生在第 3 组:cyl = 8。
我认为这是由于 case_when 的矢量化操作,因为下面似乎确实有效。
cars_nest %>%
mutate(
model = ifelse(cyl == 8, map(data, model1),
ifelse(cyl %in% c(4, 6), map(data, model2), NA)
)
)
有没有办法使用 case_when() 来完成这项工作?
注意:模型 2 中的因素是复制问题所必需的。在实际模型中,这是一个在第一层只有一个水平,在第二层有一个以上水平的因子。
【问题讨论】:
-
和你的model2有关