R中是否有函数返回有效数字?

时间:2017-06-05 08:52:20

标签: r significant-digits

某处我发现了这段代码

signdig = function(x)
{
  length(gregexpr("[[:digit:]]", as.character(x))[[1]])
}

但这会返回奇怪的数字,比如

> L=matrix(c(15,5,9,3.111),nrow=2)
> kappa(L)
[1] 239.5819 
> signdig(kappa(L))
[1] 15

有人可以建议使用算法或代码来解决它吗?

1 个答案:

答案 0 :(得分:1)

为了简单起见,我们假设L中的所有值都精确到小数点后三位,而kappa(L)也精确到小数点后三位。我们还假设一个约定,使得一个值具有等于其数量级的精度属性(表示为pa)。因此,L中的所有值都具有-3的精度属性。

然后kappa(L)中有效数字的计数是

sigfig = ceiling(log10(abs(x))) - precision + (log10(abs(x)) %% 1 == 0)

作为一般功能

count_sigfig <- function(x, precision){
  ceiling(log10(abs(x))) - precision + log10(abs(x)) %% 1 == 0)
}