我正在寻找将 0.1298 这样的数字显示为 0.130 的舍入行为,同时将尾随零保留为有效数字。这也适用于小数长度不同的表。我使用signif()对数据进行四舍五入,它工作得很好,除了R丢失了尾随零,但它是准确性所必需的。有这个工作功能吗?
有人对我有好主意吗?已经非常感谢了!
我尝试过修改signif
mod_signif <- function(x,digits) {
sprintf(paste0('%#.',3,'g'), signif(x,digits))}
这对于小数点以下 5 位的数字来说效果很好,之后科学写作就开始了。
> mod_signif(0.129554,3)
[1] "0.130"
> mod_signif(0.0129554,3)
[1] "0.0130"
> mod_signif(0.00129554,3)
[1] "0.00130"
> mod_signif(0.000129554,3)
[1] "0.000130"
> mod_signif(0.0000129554,3)
[1] "1.30e-05"
在这种情况下我期望 0.0000130
如果我尝试用 format() 函数来抵消这个问题,我就会开始原地踏步,因为然后我会回到数字并再次失去零......
您可以使用
scales::label_number()
。由于秤包中贴标机的工作方式,这需要在另一个函数体内创建一个函数。
另请注意,您需要执行一些简单的算术,将
signif()
期望的参数转换为 label_number()
期望的参数。
library(scales)
label_nicely <- function(number, digits){
value <- signif(number, digits)
## accuracy is expected to be (e.g.) 0.01 rather than, say, 3
accuracy_arg <- 1 / 10^digits
## Construct a labeler within the function body
labeller <- label_number(accuracy = accuracy_arg)
label <- labeller(value)
return(label)
}
label_nicely(0.129554,3)
#> [1] "0.130"
label_nicely(0.0000129554, 3)
#> [1] "0.000"
创建于 2023-09-15,使用 reprex v2.0.2