【发布时间】:2021-04-20 03:08:27
【问题描述】:
我想使用 summarise/across 和 lm 来拟合使用 tibble 中不同列的回归。像这样:
library(tidyverse)
library(broom)
fits <- tibble(mtcars) %>%
summarise(across(c(vs, am), ~list(tidy(lm(wt ~ .x + mpg)))))
但是作为'.x' 传递到lm 的列最终在回归输出中标记为.x。
fits %>% unnest(vs)
# A tibble: 3 x 6
term estimate std.error statistic p.value am
<chr> <dbl> <dbl> <dbl> <dbl> <list>
1 (Intercept) 6.10 0.353 17.3 8.36e-17 <tibble [3 × 5]>
2 .x 0.0738 0.239 0.308 7.60e- 1 <tibble [3 × 5]>
3 mpg -0.145 0.0200 -7.24 5.63e- 8 <tibble [3 × 5]>
如果我即时构建lm 公式并使用cur_column(),我可以保留名称,但这感觉很笨拙:
tibble(mtcars) %>%
summarise(across(c(vs, am),
~list(tidy(lm(formula(paste0("wt ~ ", cur_column(), " + mpg"))))))) %>%
unnest(vs)
# A tibble: 3 x 6
term estimate std.error statistic p.value am
<chr> <dbl> <dbl> <dbl> <dbl> <list>
1 (Intercept) 6.10 0.353 17.3 8.36e-17 <tibble [3 × 5]>
2 vs 0.0738 0.239 0.308 7.60e- 1 <tibble [3 × 5]>
3 mpg -0.145 0.0200 -7.24 5.63e- 8 <tibble [3 × 5]>
我希望输出正确使用.x 的真实列名,而不必执行此解决方法,但仍使用summarise/across 主题,不包含map.
似乎这应该是可能的。有什么建议吗?
*从@akrun 的回答中复制我的评论以澄清我在寻找什么:
我真正想知道的是,在 summarise/across 操作中保留的列名是否可以直接在 lm.xml 中引用。像 {{.x}} 或 rlang::as_name(.x) 之类的东西。我的意思是,我知道那些不起作用,但似乎应该保留名称信息,除了 cur_column 中的字符串版本。
【问题讨论】:
-
我不明白。您希望更改已有答案的哪一部分?
-
@RonakShah 我从 akrun 的帖子中复制了我的评论,我希望这能更多地解释我在寻找什么。但话又说回来,如果您和 akrun 都没有看到明显的方法来做我想做的事,那可能只是我正在使用的
dplyr方法中实际上不可用。