为什么nchar为R中的大数值变量返回错误的值?

MLE*_*LEN 3 string r scientific-notation

根据我的理解,输入应该转换为字符而不指定

"x = ...字符向量,或者要强制转换为字符向量的向量"

nchar(2015122514204000000)
# 18 
nchar("2015122514204000000")
# 19 

# Replacing the end zeroes with 111111
nchar(2015122514204111111)
# 19
Run Code Online (Sandbox Code Playgroud)

Flo*_*ian 6

它正在做以下事情:

as.character(2015122514204000000)
"2.015122514204e+18"
Run Code Online (Sandbox Code Playgroud)

nchar("2.015122514204e+18")
Run Code Online (Sandbox Code Playgroud)

是18岁.

尝试例如options(scipen=999)防止科学记数法,nchar(2015122514204000000)并将返回19.希望这可以帮助!

  • 如果你不想搞乱R选项,你也可以使用格式化调用,比如`nchar(格式(2015122514204000000,科学= F))` (5认同)
  • 另一点需要指出的是,最好修改上游代码以确保该值永远不会变成一个数字,例如使用`read.csv`的`colClasses`参数... (3认同)