【发布时间】:2018-03-07 06:34:07
【问题描述】:
在长管道的末端,我需要将一个数字四舍五入到最接近的百位。目前我正在尝试这个:
16036 %>%
round(./100)*100
我希望函数返回 16000,如下所示:
round(16036/100)*100
如何使第一个表达式起作用?
【问题讨论】:
在长管道的末端,我需要将一个数字四舍五入到最接近的百位。目前我正在尝试这个:
16036 %>%
round(./100)*100
我希望函数返回 16000,如下所示:
round(16036/100)*100
如何使第一个表达式起作用?
【问题讨论】:
试试
16036 %>%
round(-2)
【讨论】:
在round(. / 100) 周围添加大括号。目前该调用解析为round(16036, 16036 / 100),但如果添加方括号,则不会“再次”传递管道参数。 (参见例如http://magrittr.tidyverse.org/#re-using-the-placeholder-for-attributes)
16036 %>% {round(. / 100)} * 100
如果你想进一步传递结果,你应该在大括号中包含乘法,因为运算符优先级。
【讨论】:
这是一个带有magrittr 别名的选项
library(magrittr)
16036 %>%
divide_by(100) %>%
round %>%
multiply_by(100)
#[1] 16000
或者另一种方法是使用tidyverse 函数
16036 %>%
as_tibble %>%
summarise(value = round(value/100)*100) %>%
pull(value)
#[1] 16000
【讨论】: