我如何使用;dplyr“;连锁经营者%>;%在R中获取左侧本身?

我如何使用;dplyr“;连锁经营者%>;%在R中获取左侧本身?,r,dplyr,R,Dplyr,包“dplyr”有一个链式操作符。但我有一个问题,如何得到右边的术语本身 例如: c(5,7,8,1) %>% sum(`[`(1:3)) # get result 27 (This is wrong) c(5,7,8,1) %>% sum(.[1:3]) # get result 41 (This is also wrong) c(5,7,8,1) %>% `[`(1:3) %>% sum() # get result 20 (This is right) 为

包“dplyr”有一个链式操作符。但我有一个问题,如何得到右边的术语本身

例如:

c(5,7,8,1) %>% sum(`[`(1:3)) # get result 27 (This is wrong)

c(5,7,8,1) %>% sum(.[1:3]) # get result 41 (This is also wrong)

c(5,7,8,1) %>% `[`(1:3) %>% sum()   # get result 20 (This is right)

为什么第一行和第二行代码是错误的?发生了什么事?

是正确的。但是,
%%>%%
也将其作为第一个参数插入:

x = c(5,7,8,1)
x %>% sum(.[1 : 3])
同:

sum(x, x[1 : 3])
通过将表达式用大括号括起来,可以明确防止这种行为:

x %>% {sum(.[1 : 3])}
但是,在这一点上,最好将管道进一步拆分(正如您自己所做的):

或者,使用magrittr辅助函数(需要
库(magrittr)
):

让我们引用博士的话:

将lhs作为rhs中的第一个参数调用 %>%当rhs调用中需要多个参数时,将放置 lhs作为第一个参数,即x%>%f(y)等价于f(x,y)

那么会发生什么呢

当您调用sum时,它的调用方式如下:

n <- c(5,7,8,1) 
sum(n,n[1:3])
n%
作为第一个参数传递给sum,子集作为第二个参数传递。
在第三种形式中,只有选择器的输出作为sum的参数传递

我认为在第二种情况下,我们对
c(5,7,8,1)%>%c([1:3])
@akrun
c(5,7,8,1)%>%c([1:3])
将给出
578158
,但c(5,7,8,1)%>。[1:3]将给出
5781
。为什么会发生这种情况?因为
%>%
将lhs作为函数的第一个参数,所以提取的部分如下所示second@akrunc(5,7,8,1)%%>%c(
[
(1:3))将
578123
退回,但
c(5,7,8,1)%%
[
(1:3)
退回
578
。我不知道为什么会发生这种情况
x %>% extract(1 : 3) %>% sum()
n <- c(5,7,8,1) 
sum(n,n[1:3])