这是data.table::fread(版本1.9.2)中的错误还是错误的用户期望/错误?
考虑这个简单的例子,我有一个值表,TAB用可能缺少的值分隔.如果第一列中fread缺少值,则会感到沮丧,但如果其他地方缺少值,则返回data.table我期望的:
# Data with missing value in first column, third row and last column, second row:
12 876 19
23 39
15 20
fread("12 876 19
23 39
15 20")
#Error in fread("12\t876\t19\n23\t39\t\n\t15\t20") :
# Not positioned correctly after testing format of header row. ch=' '
# Data with missing values last column, rows two and three:
"12 876 19
23 39
15 20 "
fread( "12 876 19
23 39
15 20 " )
# V1 V2 V3
#1: 12 876 19
#2: 23 39 NA
#3: 15 20 NA
# Returns as expected.
Run Code Online (Sandbox Code Playgroud)
这是一个错误还是第一列中不可能有缺失的值(或者我是否有某种错误的数据?).
我相信这与我在这里报告的错误相同。
据我所知,可以使用这种类型输入的最新版本是 Rev. 1180。您可以@1180通过添加到命令末尾来签出并构建该版本svn checkout。
svn checkout svn://svn.r-forge.r-project.org/svnroot/datatable/@1180
Run Code Online (Sandbox Code Playgroud)
如果您不熟悉签出和构建包,请参阅此处
但是,自 Rev. 1180 以来,已经实现了许多出色的功能、错误修复和增强功能。(撰写本文时的开发版本是 Rev. 1272)。因此,更好的解决方案是将R/fread.R和src/fread.c文件替换为 Rev. 1180 或更早版本的版本,然后重新构建包。
您可以在线找到这些文件,而无需在此处查看它们(抱歉,我不知道如何发布包含“*”的链接,因此您必须复制/粘贴):
恐惧。R:
http://r-forge.r-project.org/scm/viewvc.php/*checkout*/pkg/R/fread.R?revision=988&root=datatable
fread.c:
http://r-forge.r-project.org/scm/viewvc.php/*checkout*/pkg/src/fread.c?revision=1159&root=datatable
重建软件包后,您将能够读取 tsv 文件。
> fread("12\t876\t19\n23\t39\t\n\t15\t20")
V1 V2 V3
1: 12 876 19
2: 23 39 NA
3: NA 15 20
Run Code Online (Sandbox Code Playgroud)
这样做的缺点是旧版本fread()无法通过新的测试——您将无法读取中间有引号的字段。
> fread('A,B,C\n1.2,Foo"Bar,"a"b\"c"d"\nfo"o,bar,"b,az""\n')
Error in fread("A,B,C\n1.2,Foo\"Bar,\"a\"b\"c\"d\"\nfo\"o,bar,\"b,az\"\"\n") :
Not positioned correctly after testing format of header row. ch=','
Run Code Online (Sandbox Code Playgroud)
使用较新版本的fread,您会得到这个
> fread('A,B,C\n1.2,Foo"Bar,"a"b\"c"d"\nfo"o,bar,"b,az""\n')
A B C
1: 1.2 Foo"Bar a"b"c"d
2: fo"o bar b,az"
Run Code Online (Sandbox Code Playgroud)
因此,目前哪个版本“有效”取决于您是否更有可能在第一列中缺少值或在字段中包含引号。对我来说,是前者,所以我仍然使用旧代码。
| 归档时间: |
|
| 查看次数: |
1267 次 |
| 最近记录: |