r - 地板和天花板有 2 位或更多有效数字

标签 r significant-digits

可以使用 signif 将结果四舍五入为两位有效数字。 :

> signif(12500,2)
[1] 12000
> signif(12501,2)
[1] 13000

但是有没有同样方便的函数,比如下面的虚构函数signif.floorsignif.ceiling ,以便我可以在地板或天花板上获得两个或更多有效数字?
> signif.ceiling(12500,2)
[1] 13000
> signif.floor(12501,2)
[1] 12000

编辑:

现有signif函数适用于负数和十进制数。

因此,可能的解决方案最好也适用于负数:
> signif(-125,2)
[1] -120
> signif.floor(-125,2)
[1] -130

和十进制数:
> signif(1.23,2)
[1] 1.2
> signif.ceiling(1.23,2)
[1] 1.3

作为一种特殊情况,0 也应该返回 0:
> signif.floor(0,2)
[1] 0

最佳答案

我认为这种方法适用于所有类型的数字(即整数、负数、小数)。

楼层功能

signif.floor <- function(x, n){
  pow <- floor( log10( abs(x) ) ) + 1 - n
  y <- floor(x / 10 ^ pow) * 10^pow
  # handle the x = 0 case
  y[x==0] <- 0
  y
}

天花板功能
signif.ceiling <- function(x, n){
  pow <- floor( log10( abs(x) ) ) + 1 - n
  y <- ceiling(x / 10 ^ pow) * 10^pow
  # handle the x = 0 case
  y[x==0] <- 0
  y
}

他们都做同样的事情。先统计数字的位数,然后使用标准floor/ceiling功能。检查它是否适合你。

编辑 1 添加了 x = 0 案例的处理程序正如 Heikki 在评论中所建议的那样。

编辑 2 再次遵循 Heikki,我添加了一些示例:

测试 x 的不同值
# for negative values
> values <- -0.12151 * 10^(0:4); values
# [1]    -0.12151    -1.21510   -12.15100  -121.51000 -1215.10000
> sapply(values, function(x) signif.floor(x, 2))
# [1]    -0.13    -1.30   -13.00  -130.00 -1300.00
> sapply(values, function(x) signif.ceiling(x, 2))
# [1]    -0.12    -1.20   -12.00  -120.00 -1200.00

# for positive values
> sapply(-values, function(x) signif.floor(x, 2))
# [1]    0.12    1.20   12.00  120.00 1200.00
> sapply(-values, function(x) signif.ceiling(x, 2))
# [1]    0.13    1.30   13.00  130.00 1300.00

测试 n 的不同值
> sapply(1:5, function(n) signif.floor(-121.51,n))
# [1] -200.00 -130.00 -122.00 -121.60 -121.51
> sapply(1:5, function(n) signif.ceiling(-121.51,n))
# [1] -100.00 -120.00 -121.00 -121.50 -121.51

关于r - 地板和天花板有 2 位或更多有效数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47177246/

相关文章:

r - 如何在堆积条形图ggplot2上组织百分比值

r - 从随机猜测二元分类模型模拟

r - 如何用因子子集()?

r - 无法加载geoR包(R,库())

r - 是否可以使用 R 中的某些 API 通过在线经纪人(例如 Zecco 或 Fidelity)进行股票交易

c# - 字符串格式 % 带有效数字

c++ - C++ 中的有效数字

python - 增加pyplot游标中的有效数字

java - 在 BigDecimal 中查找有效数字位数的好方法?

r - 如何生成一个汇总统计表,其中所有相关的小数位都出现在 R 的结果表中?