【问题标题】:Is there a function in R, which returns number of significant digits?R中是否有返回有效数字位数的函数?
【发布时间】:2017-06-05 08:52:19
【问题描述】:

我在某个地方找到了这段代码

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

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

【问题讨论】:

  • round(kappa(L))
  • 我们可以使用signif(kappa(L))
  • 我认为问题在于找到一个数字当前具有的有效位数,而不是将其格式化为特定位数?
  • @Marius 是对的。 round(kappa(L)) 将其舍入。 signif(kappa(L)) 将其四舍五入为六位数。
  • 我可以在有限的范围内(即小数)解决它:` s = function(n) { i=0 while(n%%10!=0) { i= i+1 n=n*10 } return(i) }`

标签: r significant-digits


【解决方案1】:

为了简单起见,我们假设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)
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-14
    • 2014-02-19
    • 2011-08-30
    • 2021-07-28
    • 2023-03-23
    相关资源
    最近更新 更多