R中是否有一个函数,它返回大数的数字数



在我找到此代码

的某个地方
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

有人可以提出算法或代码来解决它吗?

为了简单起见,让我们假设L中的所有值都是精确到第三个小数位,并且kappa(L)在第三个小数位也很精确。我们还假设一个惯例使一个值具有 precision属性(表示为 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)
}

最新更新