四舍五入到有效数字*仅*和数字的十进制部分(R)
四舍五入到有效数字*仅*和数字的十进制部分(R),r,rounding,significant-digits,R,Rounding,Significant Digits,signif()函数根据指定的输入数量对值进行舍入 给定值中的有效数字。该函数适用于所有 但是,数字中的数字表示不同数量的 震级的舍入和截断方式不同。比如说这个, 向量x x[[1]] #> [1] 100 #> #> [[2]] #> [1] 10 #> #> [[3]] #> [1] 1.3 #> #> [[4]] #> [1] 0.00034 …第一个和第二个值被截断为100和10,而 十进制值消失,而第三和第四个值保持不变 小数(尽管数字不同)。这是来自的预期输出 signif(
signif()
函数根据指定的输入数量对值进行舍入
给定值中的有效数字。该函数适用于所有
但是,数字中的数字表示不同数量的
震级的舍入和截断方式不同。比如说这个,
向量x
x[[1]]
#> [1] 100
#>
#> [[2]]
#> [1] 10
#>
#> [[3]]
#> [1] 1.3
#>
#> [[4]]
#> [1] 0.00034
…第一个和第二个值被截断为100和10,而
十进制值消失,而第三和第四个值保持不变
小数(尽管数字不同)。这是来自的预期输出
signif()
-当
确定显著性
是否可以忽略每个数字的整数部分,而只忽略格式
小数部分包含一组有效数字?我想去
能够返回这些值:c(100.13,10.034,1.34,0.00034)
;那个
是,
前面的完整整数,后跟有效值
数字的小数部分的位数
现在,我创建了一个函数,将值分为整数和整数
分数组件并仅在分数组件上运行signif()
,
但这似乎异常骇人
签名忽略整数[[1]]
#> [1] 100.13
#>
#> [[2]]
#> [1] 10.034
#>
#> [[3]]
#> [1] 1.34
#>
#> [[4]]
#> [1] 0.00034
有没有更好的、更推荐的方法(可能有点花哨)
sprintf()
忽略数字的整数成分?可能有更好的方法,但您的一般方法似乎并不不合理。但是,您可以通过使用floor
、利用矢量化避免lapply
、以及使用mod运算符返回每个数字的小数部分来简化它:
my_signif = function(x, digits) floor(x) + signif(x %% 1, digits)
my_signif(x, 2)
也许有更好的方法,但你的方法似乎并不不合理。但是您可以通过使用floor
并利用矢量化来简化它,以避免lappy
:my_signif=函数(x,数字)floor(x)+signif(x-floor(x,数字);我的签名(x,2)
哦,太好了,知道这不是不合理的,这让我很放心。我意识到有一个更精简的方法,我已经发布作为答案(并且@Ryan刚刚在一个(现在已删除)评论中发布了)。看起来预格式化的数字(sprintf
和formatC
)不要支持你正在尝试做的事情。请查看帮助文件?format c
中有关digits参数的文本。“f”支持小数点后的位数,而其他类似“g”的支持显示有效位数。这里有一个sprint方法,虽然它不太漂亮:temp我猜速度可能不是问题,但出于某种原因trunc
比floor
快一点。它看起来像trunc()
以负数分隔:我的签名(-10.03421,2)
=-9.03。将其替换为floor()
将给出-10.03的正确结果
[1] 100.13000 10.03400 1.34000 0.00034