为何nest_by无法复现group_by+nest的分组嵌套建模流程?
使用nest_by实现分组嵌套建模的正确方法
报错原因
nest_by() 默认返回按行(rowwise)分组的tibble,在rowwise的计算语境下,mutate调用data字段时会直接读取当前行的单个数据框,而非整个列表列,对单个数据框直接使用map迭代会触发类型不匹配错误。
正确实现方式
方案1:适配nest_by的行分组特性(推荐,代码更简洁)
无需调用map迭代,直接基于行分组的逐行计算特性构建模型即可,仅需用list()包裹模型对象,避免被mutate自动拆分:
library(tidyverse) mpg %>% nest_by(manufacturer) %>% mutate( mods = list(lm(cty ~ displ, data = data)) )
该代码运行后输出的结构与group_by() + nest的实现完全一致,若需要取消默认的rowwise分组,在管道末尾添加ungroup()即可。
方案2:保留原map写法
如果希望沿用原有map迭代的逻辑,只需先取消rowwise分组,将data列转为普通列表列后再进行迭代:
mpg %>% nest_by(manufacturer) %>% ungroup() %>% mutate( mods = data %>% map(\(i) lm(cty ~ displ, data = i)) )
内容的提问来源于stack exchange,提问作者tomw
相关产品推荐
相关产品推荐

