自R 3.1.0以来,read.csv的行为发生了变化
从R3.0.3升级到3.1.0后,我在自R 3.1.0以来,read.csv的行为发生了变化,r,csv,R,Csv,从R3.0.3升级到3.1.0后,我在read.csv方面遇到了麻烦,因为read.table的基本行为似乎发生了变化 更准确地说,我有很多CSV文件,它们曾经是使用numpy编写的。通常,这些CSV文件只包含几列实际值,例如: foo,bar,baz 1.162372390042962556e+00, 2.578863142444774326e+00, 9.740731078696458098e+02 -1.162361054912456337e+00, 6.0069499125417991
read.csv
方面遇到了麻烦,因为read.table
的基本行为似乎发生了变化
更准确地说,我有很多CSV文件,它们曾经是使用numpy编写的。通常,这些CSV文件只包含几列实际值,例如:
foo,bar,baz
1.162372390042962556e+00, 2.578863142444774326e+00, 9.740731078696458098e+02
-1.162361054912456337e+00, 6.006949912541799108e-01, 9.740731078696458098e+02
1.327779088525234963e+00, 2.448484270423362030e+00, 9.664414899055957449e+02
直到R3.0.3,在读取这些文件时,一切都正常工作。现在我明白了:
> tmp <- read.csv("foo.csv")
> str(tmp)
'data.frame': 3 obs. of 3 variables:
$ foo: Factor w/ 3 levels " 1.162372390042962556e+00",..: 1 3 2
$ bar: Factor w/ 3 levels " 2.448484270423362030e+00",..: 2 3 1
$ baz: Factor w/ 2 levels " 9.664414899055957449e+02",..: 2 2 1
>tmp str(tmp)
“data.frame”:3个obs。共有3个变量:
$foo:系数w/3级“1.162372390042962556e+00”…:1 3 2
$bar:系数w/3级“2.448484270423362030e+00”…:2 3 1
$baz:系数w/2级“9.6644148990559574449E+02”…:2 1
我必须改变我所有的代码库吗?或者这只是3.1.0中的一个bug?这不是bug,是的,您必须更改代码 从CRAN网站: type.convert()(因此默认情况下为read.table())返回一个字符 将数字输入表示为双精度输入时的向量或因子 失去准确性。类似地,对于复杂输入 如果文件包含的数字数据包含不可表示的 指定要读取为数字的小数位数 read.table()中的类为“数值”
这不是一个bug,是的,您必须更改代码 从CRAN网站: type.convert()(因此默认情况下为read.table())返回一个字符 将数字输入表示为双精度输入时的向量或因子 失去准确性。类似地,对于复杂输入 如果文件包含的数字数据包含不可表示的 指定要读取为数字的小数位数 read.table()中的类为“数值” 该文件解释了对不可表示十进制数的默认行为的更改:
type.convert()
(因此默认情况下read.table()
)返回一个字符
将数字输入表示为双精度输入时的向量或因子
失去准确性。类似地,对于复杂输入
如果文件包含的数字数据包含不可表示的
指定要读取为数字的小数位数
将read.table()
中的类设置为“数值”
您的数字有18位小数,双精度只能准确表示15位左右。该文件解释了对不可表示的十进制数字的默认行为的更改:
type.convert()
(因此默认情况下read.table()
)返回一个字符
将数字输入表示为双精度输入时的向量或因子
失去准确性。类似地,对于复杂输入
如果文件包含的数字数据包含不可表示的
指定要读取为数字的小数位数
将read.table()
中的类设置为“数值”
您的数字有18位小数,双精度只能精确表示15位左右。这是最近修正的。您需要一个足够新的R版本。请参阅,谢谢,这是个好消息。:-)这是最近修复的。您需要一个足够新的R版本。请参阅,谢谢,这是个好消息。:-)