Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
自R 3.1.0以来,read.csv的行为发生了变化_R_Csv - Fatal编程技术网

自R 3.1.0以来,read.csv的行为发生了变化

自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

从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.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版本。请参阅,谢谢,这是个好消息。:-)