用管道求平方和

Pet*_*aab 3 r pipe

如果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)。

尽管有一些解决方法,但是我主要想知道发生了什么。

Ben*_*ker 5

有趣的问题!

发生的情况是管道自动将其参数作为第一个参数传递给以下表达式,因此x %>% sum(.^2)等效于sum(x, x^2)

我更用于与工作%>%在一个数据帧/ tidyverse范围内,其中第一个参数到每个tidyverse动词(例如mutatefilterselect)本身是一个数据帧:

data.frame(x) %>% dplyr::mutate(y=sum(x^2))
Run Code Online (Sandbox Code Playgroud)