dplyr管道输入处理?

3

我一直找不到这个问题的答案,所以我想在这里提出来。有人知道这是怎么回事吗?

as.integer(.29*100)
[1] 28

.29*100 %>% as.integer
[1] 29

我知道.29*100会得到一个double类型的结果,而doubles类型不能完美地表示,因此我们从as.integer中获得了这个输出结果,但是管道符号(“|”)是怎么使结果不同的?

1个回答

3
我们需要用括号 () 将其保持为一个单独的块,否则会存在运算符优先级。
library(magrittr)
(.29 * 100) %>%
      as.integer
#[1] 28

即它正在执行。
as.integer(100) * 0.29
#[1] 29

如果使用括号包裹存在困难,我们也可以进行一些其他版本的操作。

.29 %>%
    `*`(100) %>% 
   as.integer
#[1] 28

或使用别名 multiply_by

.29 %>%
    multiply_by(100) %>%
   as.integer
#[1] 28

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接