将值四舍五入到 R 中的特定有效数字

Round up values to a specific significant figure in R

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

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

例如:将 0.001145288 舍入到 1 位有效数字将得到 0.002

如有任何建议,我们将不胜感激:)

干杯!

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

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

我创建了一个将格式更改为科学格式的函数,将字符串拆分 '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