【问题标题】:Piping a scalar to round function in r在 r 中将标量传递给舍入函数
【发布时间】:2018-03-07 06:34:07
【问题描述】:

在长管道的末端,我需要将一个数字四舍五入到最接近的百位。目前我正在尝试这个:

16036 %>% 
    round(./100)*100

我希望函数返回 16000,如下所示:

round(16036/100)*100

如何使第一个表达式起作用?

【问题讨论】:

    标签: r dplyr rounding


    【解决方案1】:

    试试

    16036 %>%
        round(-2)
    

    【讨论】:

      【解决方案2】:

      round(. / 100) 周围添加大括号。目前该调用解析为round(16036, 16036 / 100),但如果添加方括号,则不会“再次”传递管道参数。 (参见例如http://magrittr.tidyverse.org/#re-using-the-placeholder-for-attributes

      16036 %>% {round(. / 100)} * 100
      

      如果你想进一步传递结果,你应该在大括号中包含乘法,因为运算符优先级。

      【讨论】:

      • 啊……我想知道这将如何解决……有没有办法查看管道操作如何明确解决?
      • 我不知道,也许这是 magrittr 作者的作品?
      【解决方案3】:

      这是一个带有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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-02-26
        • 2013-10-08
        • 1970-01-01
        • 2017-07-08
        • 1970-01-01
        • 1970-01-01
        • 2020-07-28
        • 2021-07-18
        相关资源
        最近更新 更多