如果x <- 1:5
是以下情况:
sum(x^2)
Run Code Online (Sandbox Code Playgroud)
返回55,正确答案。但是,如果使用管道运算符:
x %>% sum(.^2)
Run Code Online (Sandbox Code Playgroud)
然后它返回70(这恰好是的总和x^2
和的总和x
)。
尽管有一些解决方法,但是我主要想知道发生了什么。
有趣的问题!
发生的情况是管道自动将其参数作为第一个参数传递给以下表达式,因此x %>% sum(.^2)
等效于sum(x, x^2)
。
我更用于与工作%>%
在一个数据帧/ tidyverse范围内,其中第一个参数到每个tidyverse动词(例如mutate
,filter
,select
)本身是一个数据帧:
data.frame(x) %>% dplyr::mutate(y=sum(x^2))
Run Code Online (Sandbox Code Playgroud)