数据表::fread不';我不喜欢第一列中缺少值

数据表::fread不';我不喜欢第一列中缺少值,r,data.table,R,Data.table,这是data.table::fread(1.9.2版)中的错误还是用户期望值/错误放错了位置 考虑这个简单的例子,我有一个值表,TAB,用可能缺少的值分隔。如果第一列中缺少值,fread会被打乱,但如果缺少值在别处,我将返回数据。表我希望: # Data with missing value in first column, third row and last column, second row: 12 876 19 23 39 15 20 fread("12 876

这是
data.table::fread
(1.9.2版)中的错误还是用户期望值/错误放错了位置

考虑这个简单的例子,我有一个值表,
TAB
,用可能缺少的值分隔。如果第一列中缺少值,
fread
会被打乱,但如果缺少值在别处,我将返回
数据。表
我希望:

# 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.

这是一个错误还是第一列中不可能有缺失的值(或者我是否有格式错误的数据?)。

我相信这是我报告的同一个错误

我所知道的最新版本将使用这种类型的输入是Rev。1180您可以通过在
svn checkout
命令的末尾添加
@1180
来签出并构建该版本

svn checkout svn://svn.r-forge.r-project.org/svnroot/datatable/@1180
如果您不熟悉签出和构建包

但是自Rev。1180(撰写本文时的开发版本为版本1272)。因此,更好的解决方案是将
R/fread.R
src/fread.c
文件替换为Rev。1180或更高版本,然后重新构建包

您无需在此处签出即可在线找到这些文件(抱歉,我不知道如何发布包含“*”的链接,因此您必须复制/粘贴):

弗里德·R:
http://r-forge.r-project.org/scm/viewvc.php/*签出*/pkg/R/fread.R?修订版=988&root=datatable

弗瑞德c:
http://r-forge.r-project.org/scm/viewvc.php/*签出*/pkg/src/fread.c?修订版=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

这样做的缺点是旧版本的“代码> Frad())/>代码不通过一个新的测试——你将无法读取中间有引号的字段。

> 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=','
使用较新版本的
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"

因此,目前,哪个版本“有效”取决于您是否更可能在第一列中缺少值,或者在字段中使用引号。对我来说,它是前者,所以我仍然使用旧代码。

replicate of@GSee我不认为它是重复的-相同的错误消息,但我没有看到该问题中缺少的值。我注意到阿南达提出的解决方案在这种情况下也不起作用。但是很好的链接到相关的r-forge问题,谢谢!现在。。。如何查看版本1180。。。。。?!将
@1180
添加到命令的末尾:
svn checkoutsvn://svn.r-forge.r-project.org/svnroot/datatable/@1180