将值汇总到R中的特定有效数字

时间:2016-06-02 05:54:42

标签: r rounding significant-digits

将值舍入到特定有效数字的最简单方法是什么?

类似函数signif(),但只执行向上舍入(而不是向下)

例如:向上舍入0.001145288至1有效数字将产生0.002

任何建议将不胜感激:)

干杯!

2 个答案:

答案 0 :(得分:5)

此函数在一个有效数字的情况下提供所需的输出:

upround1 <- function(x) {
         if (isTRUE(all.equal(x,0))) return (x)
         decs <- 10^floor(log10(abs(x)))
         ceiling(x/decs)*decs
         }

示例:

upround1(0.001145288)
#[1] 0.002
upround1(0.0008145258)
#[1] 9e-04
upround1(11)
#[1] 20
upround1(-11)
#[1] -10
upround1(-0.023)
#[1] -0.02

答案 1 :(得分:3)

我创建了一个将格式更改为“科学”的函数,将字符串拆分为“e”并使用该信息来限制数字。

my_ceiling <- function(x){
  num_string <- format(x, scientific=TRUE)

  n <- strsplit(num_string, "e")
  n1 <- sapply(n, function(x) as.numeric(x[1]))
  n2 <- sapply(n, function(x) as.numeric(x[2]))

  ceiling(n1) * 10^(n2)
}    

my_ceiling(0.001145288)
# [1] 0.002    

my_ceiling(0.0974343)
# [1] 0.1    

my_ceiling(0)
# [1] 0    

set.seed(1)
x <- runif(10, 0.001, 0.01)
my_ceiling(x)
# [1] 0.004 0.005 0.007 0.010 0.003 0.010 0.010 0.007
# [9] 0.007 0.002