首页 > 解决方案 > magrittr 点/句点(“.”)运算符在管道的最开始时会做什么?

问题描述

我不明白.以下代码中的内容在做什么或在哪里可以找到它的文档:

library(tidyverse)

ggplot(iris) + 
  geom_point(
    aes(x=Sepal.Length, y=Sepal.Width), 
    data = . %>% filter(Species == 'setosa')
  )

这似乎与 dplyr 句点字符是什么“。”中描述的用法完全不同。参考?其中.没有出现在最左侧的位置。

这里的文档只是说

带有点 (.) 作为 LHS 的管道将创建一元函数。这用于定义聚合器函数。

但这对我来说根本不清楚,我希望获得更多信息。

标签: rggplot2magrittr

解决方案


这里的混乱实际上可能来自两个地方。

首先,是的,. %>% something()语法创建了一个接受一个参数的“一元”函数。所以:

. %>% filter(Species == 'setosa')

相当于

function(.) filter(., Species == 'setosa')

这里的第二部分是ggplot2层实际上可以将函数作为data参数。来自例如?geom_point

要在该层中显示的数据。有三个选项:

...

将使用单个参数调用函数,即绘图数据。返回值必须是一个data.frame,并将用作图层数据。

因此,传递给的函数geom_point将始终应用于默认绘图数据(即定义在 中的数据ggplot())。

请注意,您的链接问题涉及.in的使用funs(),这与其在此处的使用没有直接关系。


推荐阅读