R& S中的字符数据类型长度问题小数精度

时间:2015-03-05 02:26:27

标签: r type-conversion

尝试创建一个函数来获取数值数据的精度。 (小数点右边的位数)

    decimalplaces <- function(x) {
            if (x %% 1 != 0) {
                    pattern <- "^([0-9]+)[.]([0-9]+)$"
                    dec_part <- gsub(pattern,"\\2", x)            
                    nchar(dec_part)
            } else { 
                    return(0) 
        }
    }

超过16位的值出现问题 - nchar强制&#34; dec_part&#34;到一个只能存储16位数的字符串。

有没有办法克服R中的这个限制?

数字数据是否有nchar的替代品?

(R版本3.1.1 64位)

1 个答案:

答案 0 :(得分:2)

问题&#39;不在nchar但在gsub中,as.character适用于非字符xas.character的文档说:

  

as.character表示实数和复数到15显着   数字(技术上是编译器对ISO C常数的设置)   DBL_DIG,在支持IEC60559算术的机器上将是15   根据C99标准)。这确保了所有数字   结果将是可靠的(而不是表示的结果   错误),但确实意味着转换为字符并返回数字   可能会改变这个数字。如果要将数字转换为字符   以最大可能的精度,使用格式。

所以,你可以使用

dec_part <- gsub(pattern,"\\2", format(x,digits=22))    

而不是

dec_part <- gsub(pattern,"\\2", x)

在您的代码中,但要小心,因为有充分理由设置了15位有效数字限制,因此很有可能在尾随数字中找到噪音。例如,

> format(1/3,digits=22)
[1] "0.3333333333333333148296"