magrittr 点/句点 (".") 运算符在管道的最开始时会做什么?

nic*_*ten 5 r ggplot2 magrittr

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

library(tidyverse)

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

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

这里的文档只是说

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

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

Axe*_*man 5

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

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

. %>% filter(Species == 'setosa')
Run Code Online (Sandbox Code Playgroud)

相当于

function(.) filter(., Species == 'setosa')
Run Code Online (Sandbox Code Playgroud)

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

该层要显示的数据。有以下三种选择:

...

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

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

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