保留旧的(3.1.0之前的)type.convert行为

flo*_*del 15 r read.table

R 3.1.0已经推出,其中一项新功能如下:

type.convert()(因此默认情况下read.table())在表示数字输入时返回字符向量或因子,因为双精度会失去准确性.同样对于复杂的输入.

举个例子:

df <- read.table(text = "num1 num2
1.1 1.1234567890123456
2.2 2.2
3.3 3.3", header = TRUE)

sapply(df, class)
#      num1      num2 
# "numeric"  "factor"
Run Code Online (Sandbox Code Playgroud)

与以前的版本,read.table将返回两个数字列.

对于那些喜欢我的人来说,关心这种变化,可以做些什么来保持旧的行为呢?

注意:我想要一个不对输入数据做出假设的通用解决方案,即不建议我colClasses = "numeric"在上面的例子中使用.谢谢.

Bri*_*ggs 11

在3.1.1版中,新闻文件中列出了此更改:

type.convert(),read.table()类似的read.*()函数得到一个新的numerals参数,指定数字输入在转换为双精度时失去准确性的方式.默认情况下numerals = "allow.loss"允许精度损失,如3.1.0之前的R版本.

关于原始更改的许多发布后讨论,包括通过附加警告恢复默认行为的决定,可以在开发人员的电子邮件列表中找到.

对于3.1.0版,必须修改代码以获取旧行为.切换到3.1.1是另一种策略.

3.1.0版(来自同一个新闻文件)中提到的这个更改说

type.convert()(因此默认情况下read.table())在表示数字输入时返回字符向量或因子,因为双精度会失去准确性.同样对于复杂的输入.

如果文件中包含与旨在被解读为数字小数点后的数字不可表示的数字数据,指定colClassesread.table()"numeric".

注意:原始答案是在修补程序的适用版本为3.1.0修补时编写的.3.1.1已经发布,答案已经更新.