purrr::map额外参数异常:为何.id指定的var列丢失?
问题原因解析
核心问题是参数传递的对象错误,具体拆解如下:
- 初始代码里的
.id = "var"是传给map_df()的参数,而你后来的写法误把这个参数传给了broom::tidy()。 map_df()的.id参数作用是:当迭代一个命名列表(这里select(where(is.numeric))返回的就是以列名为元素名的命名列表)时,自动生成一列(这里命名为var),存储每个列表元素的名称——也就是你要的回归变量名。broom::tidy()的.id参数是另一个用途:它是在直接传入多个模型组成的列表时(比如tidy(list(model1, model2), .id = "model")),用来给不同模型的结果加标识列的。你在map()里逐个处理单个模型,传给tidy()的.id根本不会生效,同时map_df()没收到.id参数,自然就不会生成var列。
正确的匿名函数写法
如果你想用匿名函数,应该把.id = "var"留给map_df(),匿名函数只负责调用tidy():
penguins %>% select(where(is.numeric)) %>% map(\(x) lm(x ~ penguins$species, .)) %>% map_df(\(x) broom::tidy(x), .id = "var")
或者用公式式匿名函数:
penguins %>% select(where(is.numeric)) %>% map(\(x) lm(x ~ penguins$species, .)) %>% map_df(~ broom::tidy(.x), .id = "var")
内容的提问来源于stack exchange,提问作者user23485480
相关产品推荐
相关产品推荐

