【问题标题】:What does the magrittr dot/period (".") operator do when it's at the very beginning of a pipeline?magrittr 点/句点(“.”)运算符在管道的最开始时会做什么?
【发布时间】:2019-04-25 11:08:17
【问题描述】:

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

library(tidyverse)

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

这似乎与What does the dplyr period character "." reference? 中描述的用法完全不同,. 没有出现在最左侧的位置。

文档here 只是说

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

但这一点我都不清楚,我希望获得更多信息。

【问题讨论】:

  • 这是之前的data.frame。
  • 我不确定为什么会这样或文档在哪里?
  • 文档?我们来了:magrittr v1.5vignette。干杯
  • 这些文档中的唯一解释是“带有点 (.) 的管道,因为 LHS 将创建一元函数。这用于定义聚合函数。” ...我希望通过提出这个问题来获得更多信息...
  • 这似乎意味着它会像function(x) {x} 那样行事,对吗?

标签: r ggplot2 magrittr


【解决方案1】:

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

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

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

等价于

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

这里的第二部分是ggplot2 层实际上可以将一个函数作为它们的data 参数。从例如?geom_point:

要在这一层显示的数据。共有三个选项:

...

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

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

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

【讨论】:

  • 谢谢!那么在这种情况下,. 本身就等同于function(x){x} 是否公平?
  • . 本身什么都不做,它是 %>% 识别它并发挥所有魔力。所以你真的把. %>% something 作为一个组合来创建一个函数。您可以查看管道的来源并查看它是否明确检查左侧(LHS)是否为占位符(即.),因此将其编程为特殊情况。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-11
  • 2015-03-12
  • 2017-10-02
  • 1970-01-01
相关资源
最近更新 更多