我如何使用;dplyr“;连锁经营者%>;%在R中获取左侧本身?
包“dplyr”有一个链式操作符。但我有一个问题,如何得到右边的术语本身 例如:我如何使用;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) 为
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])
@akrunc(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])