package" 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)
为什么第一行和第二行代码有误?他们发生了什么事?
答案 0 :(得分:16)
点.
是正确的。但是,%>%
也会将其作为第一个参数插入:
x = c(5,7,8,1)
x %>% sum(.[1 : 3])
与:
相同sum(x, x[1 : 3])
您可以通过将表达式包装在大括号中来显式阻止此行为:
x %>% {sum(.[1 : 3])}
然而,在这一点上,最好将管道分开一点(就像你自己一样):
x %>% `[`(1 : 3) %>% sum()
或者,使用magrittr辅助函数(需要library(magrittr)
):
x %>% extract(1 : 3) %>% sum()
答案 1 :(得分:5)
让我们引用文档:
将lhs作为rhs调用中的第一个参数放置。的默认行为 当在rhs调用中需要多个参数时,%>%将被放置 lhs作为第一个参数,即x%>%f(y)等于f(x,y)。
那会发生什么?
当你打电话给sum时,会这样调用:
once(SomeClass)
n <- c(5,7,8,1)
sum(n,n[1:3])
的lhs作为第一个arg传递给sum,子集作为第二个arg传递。
在第三个表单上,只有选择器的输出作为参数传递给sum