我正在玩purrr
以及此post
我的目标是使用purrr::map2
(或某些变体)通过组(cyl)应用函数(在本例中为均值),然后创建一些使用函数的先前应用结果的图在结果图中。或者换句话说,我想在mean_list
链中使用dplyr
列表列为每个图上的均值添加垂直线。这可能吗?
library(tidyverse)
mt_list <- mtcars %>%
group_by(cyl) %>%
nest() %>%
mutate(mean_list = map2(data, cyl, ~mean(.$disp))) %>%
mutate(plot = map2(data, cyl, ~ggplot(data = .x) +
geom_point(aes(y = drat, x = disp)) #+
#geom_vline(data = mean_list ,aes(xintercept) Unsure about this step
))
这是我之后的一种情节的一个例子,但这似乎是一种愚蠢的方式来做到这一点,当整点都要包含在像mt_list
mt_list$plot[[1]] +
geom_vline(aes(xintercept = mt_list$mean_list[[1]]))
答案 0 :(得分:1)
这可以通过将mean_list
作为第二个参数传递给map2
而不是cyl
,然后在xintercept = .y
中使用geom_vline
来完成。
mt_list <- mtcars %>%
group_by(cyl) %>%
nest() %>%
mutate(mean_list = map(data, ~mean(.$disp))) %>%
mutate(plot = map2(data, mean_list, ~ ggplot(data = .x) +
geom_point(aes(y = drat, x = disp)) +
geom_vline(xintercept = .y)
))
请注意,对于此特定用例,您还可以使用mean_list
来完全避免创建aes(xintercept = mean(disp))
:
mt_list <- mtcars %>%
group_by(cyl) %>%
nest() %>%
mutate(plot = map(data, ~ ggplot(data = .) +
geom_point(aes(y = drat, x = disp)) +
geom_vline(aes(xintercept = mean(disp)))))