我很喜欢使用purrr的map和map2,但我经常发现自己想要映射更多的输入。我知道还有 pmap,但我不太明白如何使用它。
下面是我在 ggplot2 中创建配对图的示例。它缺少 name.x 的值作为 x 轴的标签。
plots = iris%>%
pivot_longer(!Species)%>%
left_join(
iris%>%
pivot_longer(!Species),by="Species"
)%>%
group_by(name.x,name.y)%>%
nest()%>%
mutate(
plots =
map2(
.x=data,.y=name.x,
~ggplot(.x)+
geom_point(aes(value.x,value.y,color=Species))+
xlab(.y)
))
ggarrange(plotlist=plots$plots, common.legend = TRUE, legend="bottom")
我期待您的建议! 如果能顺利地在管道中使用那就更理想了。
像这样使用
pmap
:
plots <- iris %>%
pivot_longer(!Species)%>%
left_join(iris %>% pivot_longer(!Species), by = "Species")%>%
group_by(name.x, name.y) %>%
nest() %>%
mutate(plots = pmap(
list(data, name.x, name.y),
\(d, x, y) ggplot(d)+
geom_point(aes(value.x, value.y, color = Species))+
xlab(x) + ylab(y)
))
即:
list(data, name.x, name.y)
定义该函数有多种方法。例如。您可以像使用
map2
那样使用公式语法,即 ..1
、..2
和 ..3
。但我更喜欢匿名函数的新语法(即 \(x, y)
),因为你可以命名参数。