【发布时间】:2020-06-23 14:28:13
【问题描述】:
在tidyverse 理念中,对于data.frame 驱动的分析,使用管道进行嵌套和映射似乎是一个非常可行的工作流程。不利的一面是,要掌握语法需要花点功夫……
受到这个想法的启发,当我通过这个Coding in R: Nest and map your way to efficient code 时。一切都很好,但想知道是否可以简化工作流程,简而言之,结合:
- 嵌套并不可怕,您的数据也没有消失和
- 绘制你的巢穴,
一行,而不是两步。
为了可重复性,我们可以提出另一个 SO 问题:Using nest and purrr::map outside of mutate,可以轻松删除 cyl 列,但是,如果我想这样做
- 选择一些特定的列,例如,
mpg、disp和vs用于4圆柱体和 - 仅
mpg、disp用于8气缸 和 - 删除/取消修改与
6气缸和相关的所有内容 - 使用
map()函数族和所选变量拟合lm()模型和 - 使用
walk()之类的方式保存模型。
library(tidyverse)
mtcars %>%
split(.$cyl) %>%
map(~ .x %>% select(-cyl)) %>%
walk2(names(.), ~write_csv(.x, paste0(.y, '.csv')))
这可以正常工作,但是当我尝试使用 nest 和 map 的方法时,即使没有尝试目标 1-3,它也会引发错误:
mtcars %>% group_by(cyl) %>% nest() %>% map(.$data, lm(.$mpg ~ .$disp + .$vs, .data))
错误:索引 1 的长度必须为 1,而不是 10 运行
rlang::last_error()以查看错误发生的位置。 如果解决方案使用新引入的across()和 dplyr 1.0.0,那就太好了。
【问题讨论】:
标签: tidyverse data.frame nest map r dplyr tidyverse purrr