在R中,%>%代表什么意思?

206

我正在按照这个例子进行操作,server.R文件在这里可以找到

我计划做一个类似的过滤器,但是不清楚%>%是什么意思。

 # Apply filters
    m <- all_movies %>%
      filter(
        Reviews >= reviews,
        Oscars >= oscars,
        Year >= minyear,
        Year <= maxyear,
        BoxOffice >= minboxoffice,
        BoxOffice <= maxboxoffice
      ) %>%
      arrange(Oscars)

3
请看此处链接,该链接在 dplyr 中被广泛使用。 - joran
14
在R语言中,它本身没有意义。但是magrittr包(dplyr使用的包)为其定义了一个意义:http://cran.r-project.org/package=magrittr - G. Grothendieck
请看这个链接:https://dev59.com/114d5IYBdhLWcg3wJfpm?noredirect=1#comment53064401_27125672 - alfakini
2
可能是What does %>% function mean in R?的重复问题。 - miken32
1个回答

380

%>% 中缀运算符不是base R的一部分,而实际上是由包magrittr定义的(CRAN),并且被dplyr (CRAN)广泛使用。

它像管道一样工作,因此与马格里特著名的绘画《图像的诡计》有关。

该函数的作用是将操作符左侧的内容传递给操作符右侧的第一个参数。在以下示例中,数据框iris被传递给head()

library(magrittr)
iris %>% head()
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa
6          5.4         3.9          1.7         0.4  setosa
因此,iris %>% head()相当于head(iris)。 通常,%>%被称为多次调用以将函数“链接”在一起,这实现了与嵌套相同的结果。例如,在下面的链中,iris被传递给head(),然后该结果被传递给summary()
iris %>% head() %>% summary()

因此,iris %>% head() %>% summary() 等价于 summary(head(iris))。一些人更喜欢使用链接而不是嵌套,因为应用的函数可以从左到右读取,而不是从内向外。


1
我们能否在R中使用unix的|操作符来覆盖%>%操作符? - Sujoy
3
我想你可以这样做,但这可能会干扰“或”运算符 | 的使用,有时是必需的。 - wonder
也许这是一个愚蠢的问题,但我很好奇 %>% 这个符号除了被字面上称为“管道”之外,如何与《图像的背叛》联系起来?管道操作符在 Bash 脚本中非常常见,所以我认为它是在引用那个? - Null Salad
@NullSalad《图像的背叛》仅被引用在软件包描述中,显然只是文字游戏,详情请见此链接:https://cran.r-project.org/web/packages/magrittr/index.html。 - Dmitry Orlov
为什么要使用“像管子一样工作但不是管子”的东西,而不直接使用管子呢? - undefined
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接