舍入到有效数字*仅* R 中数字的小数部分
Round to significant digits *only* with decimal portion of number in R
signif()
函数根据指定的数量舍入值
给定值中的有效数字。该功能适用于所有
但是,数字中的数字,所以不同顺序的数字
幅度被舍入和截断不同。例如,有了这个
向量 x
…
x <- c(100.1303421, 10.03421, 1.3421, 0.0003421)
lapply(x, signif, 2)
#> [[1]]
#> [1] 100
#>
#> [[2]]
#> [1] 10
#>
#> [[3]]
#> [1] 1.3
#>
#> [[4]]
#> [1] 0.00034
…第一个和第二个值被截断为 100 和 10 并且
十进制值消失,而第三和第四个值保持
小数(尽管数字不同)。这是预期的输出
signif()
——当
确定显着性。
是否可以忽略每个数字的整数部分,只格式化
具有一组有效数字的小数部分?我想成为
能够 return 这些值:c(100.13, 10.034, 1.34, 0.00034)
;那
是 .
之前的完整整数,后跟重要的
数字的小数部分的数字。
现在,我创建了一个函数,将值分成整数和
分数分量并仅在分数分量上运行 signif()
,
但这似乎非常 hacky。
signif_ignore_integer <- function(x, digits = 2) {
as.integer(x) + signif(x - as.integer(x), digits)
}
lapply(x, signif_ignore_integer, 2)
#> [[1]]
#> [1] 100.13
#>
#> [[2]]
#> [1] 10.034
#>
#> [[3]]
#> [1] 1.34
#>
#> [[4]]
#> [1] 0.00034
有没有更好更推荐的方法(可能有点花哨
sprintf()
格式)将值四舍五入到给定的有效位数
忽略整数部分的数字?
可能有更好的办法,但你的大体思路似乎不无道理。但是,您可以通过使用 floor
来简化它,利用矢量化来避免 lapply
,并使用 mod 运算符来 return 每个数字的小数部分:
my_signif = function(x, digits) floor(x) + signif(x %% 1, digits)
my_signif(x, 2)
[1] 100.13000 10.03400 1.34000 0.00034
signif()
函数根据指定的数量舍入值
给定值中的有效数字。该功能适用于所有
但是,数字中的数字,所以不同顺序的数字
幅度被舍入和截断不同。例如,有了这个
向量 x
…
x <- c(100.1303421, 10.03421, 1.3421, 0.0003421)
lapply(x, signif, 2)
#> [[1]]
#> [1] 100
#>
#> [[2]]
#> [1] 10
#>
#> [[3]]
#> [1] 1.3
#>
#> [[4]]
#> [1] 0.00034
…第一个和第二个值被截断为 100 和 10 并且
十进制值消失,而第三和第四个值保持
小数(尽管数字不同)。这是预期的输出
signif()
——当
确定显着性。
是否可以忽略每个数字的整数部分,只格式化
具有一组有效数字的小数部分?我想成为
能够 return 这些值:c(100.13, 10.034, 1.34, 0.00034)
;那
是 .
之前的完整整数,后跟重要的
数字的小数部分的数字。
现在,我创建了一个函数,将值分成整数和
分数分量并仅在分数分量上运行 signif()
,
但这似乎非常 hacky。
signif_ignore_integer <- function(x, digits = 2) {
as.integer(x) + signif(x - as.integer(x), digits)
}
lapply(x, signif_ignore_integer, 2)
#> [[1]]
#> [1] 100.13
#>
#> [[2]]
#> [1] 10.034
#>
#> [[3]]
#> [1] 1.34
#>
#> [[4]]
#> [1] 0.00034
有没有更好更推荐的方法(可能有点花哨
sprintf()
格式)将值四舍五入到给定的有效位数
忽略整数部分的数字?
可能有更好的办法,但你的大体思路似乎不无道理。但是,您可以通过使用 floor
来简化它,利用矢量化来避免 lapply
,并使用 mod 运算符来 return 每个数字的小数部分:
my_signif = function(x, digits) floor(x) + signif(x %% 1, digits)
my_signif(x, 2)
[1] 100.13000 10.03400 1.34000 0.00034