函数在 R 中是什么意思?

我看到过 %>%(百分比大于百分比)函数在一些包中的使用,比如 译自: 美国《每日邮报》网站(https://github.com/hadley/dplyr)翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳。这是什么意思?这是一种用 R 写闭包块的方法吗?

538392 次浏览

操作员

%>%没有内在的含义,但是用户(或包)可以自由地以他们喜欢的任何方式定义形式 %whatever%的操作符。例如,这个函数将返回一个字符串,该字符串由左参数后跟逗号和空格,然后是右参数组成。

"%,%" <- function(x, y) paste0(x, ", ", y)


# test run


"Hello" %,% "World"
## [1] "Hello, World"

R 的底部提供了 %*%(矩阵乘法)、 %/%(整数除法)、 %in%(lhs 是 rhs? 的一个组成部分)、 ABc3(外围产品)及 ABc4(克罗内克积)。目前尚不清楚 %%是否属于这一类别,但它代表了模数。

R 包 expm 定义了一个矩阵幂运算符 %^%

操作符 R 包定义了大量这样的操作符,例如 %!in%(对于非 %in%)。请参见网站“ http://cran.r-project.org/web/package/Operator/operators.pdf”rel = “ norefrer”> http://cran.r-project.org/web/packages/operators/operators.pdf

Igraph 此包定义% ——% 、%->% 和% < -% 来选择边。

润滑 此包定义% m +% 和% m -% 以添加和减去月份,% -% 以定义间隔。Igraph 还定义% ——% 。

管道

%>%的例子中,magrittr R 包定义了它,就像在 magrittr 小插图中所讨论的那样。参见 http://cran.r-project.org/web/packages/magrittr/vignettes/magrittr.html

Magitr 也定义了许多其他类似的运算符。请参阅先前链接的附加管道操作员部分,其中讨论了 %T>%%<>%%$%以及 http://cran.r-project.org/web/packages/magrittr/magrittr.pdf的更多细节。

Dplyr dplyr R 包用于定义一个类似的 %.%操作符; 但是,它已经被废弃了,dplyr 现在建议用户使用从 magrittr 导入并提供给 dplyr 用户的 %>%。正如 David Arenburg 在评论中提到的,这个 SO 问题讨论了它和 magrittr 的 %>%之间的差异:% 之间的差异。% (dplyr)及% >% (magrittr)

pipeR R R 包 pipeR R 定义了一个类似于 magrittr 的% >% 的 %>>%操作符,可以作为它的替代品使用。请参阅 http://renkun.me/piper R-lessons/rel = “ norefrer”> http://renkun.me/piper-tutorial/

pipeR 包还定义了许多其他类似的操作符

Postlogic 包定义了 %if%%unless%操作符。

Wrapr R 包 wrapr 定义了一个点管道 %.>%,它是 %>%的显式版本,因为它不会隐式插入参数,而只是替代右边的点的显式用法。这可以被认为是 %>%的另一种选择。请参见 https://winvector.github.io/wrapr/articles/dot_pipe.html

比扎罗管 。这实际上不是一个管道,而是一些巧妙的基本语法,它们的工作方式类似于不实际使用管道的管道。http://www.win-vector.com/blog/2017/01/using-the-bizarro-pipe-to-debug-magrittr-pipelines-in-r/中讨论了这个问题,其思想是:

1:8 %>% sum %>% sqrt
## [1] 6

一个人写下这样的话。在这种情况下,我们显式地使用 dot 而不是省略 dot 参数,并在管道的每个组件的末尾赋值给名称为 dot (.)的变量。后面跟一个分号。

1:8 ->.; sum(.) ->.; sqrt(.)
## [1] 6

更新 增加了 expm 包的信息和顶部的简化示例。增加了后置逻辑包。

更新2 R 的开发版本已经定义了一个 |>管道。与马格里特的 %>%不同,它只能替换成右边的第一个参数。虽然有限,但它通过语法转换工作,因此没有性能影响。

在阅读了 由 G.Grothendieck 提供的链接之后,我的理解是% >% 是一个管道函数的操作符。这有助于提高可读性和生产率,因为通过这些管道跟踪多个函数的流动比在嵌套多个函数时返回更容易。

%>%类似于 Unix 中的管道

a <- combined_data_set %>% group_by(Outlet_Identifier) %>% tally()

combined_data_set的输出进入 group_by,它的输出进入 tally,然后最终的输出被分配给 a

这为您提供了方便、简单的方法,可以在不创建变量和存储中间值的情况下串行使用函数。

R 包 dplyr 和 sf 从 R 包 magrittr 导入操作符% >% 。

可使用以下命令提供帮助:

?'%>%'

当然,包必须在加载之前使用。

library(sf)

马格里特前进管道操作员的文件提供了一个很好的例子: 当函数只需要一个参数时,x %>% f等效于 f(x)

我对此知之甚少,但在我大学研究 R 多变量正态分布时,我曾在一个案例研究中看到过这一点

假设您在一个名为“ df _ together”的变量中有一个数据帧,并且您希望将它导入 ggplot,那么您可以使用该 %>%

例如:

df_gather %>% ggplot(aes(x = Value, fill = Variable, color = Variable))+
geom_density(alpha = 0.3)+ggtitle('Distibution of X')

% —— -% 的另一种用法是使用 %<-%,这意味着多重赋值运算符,例如:

session <- function(){
x <- 1
y <- 2
z <- y + x
list(x,y,z)
}


c(var1,var2,result) %<-% session()