Data.table: fread 无法处理错误引用的字段,如果它是样本外的

创建于 2017-07-09  ·  3评论  ·  资料来源: Rdatatable/data.table

这个例子:

require(data.table)
DT = data.table(A=rep("abc", 10000), B="def")
DT[110, A:='"a"b']
fwrite(DT, f<-tempfile(), quote=F)
fread(f)

产生误导性的错误消息:

Expecting 2 cols but row 0 contains only 1 cols (sep=','). Consider fill=true. <<"a"b,def>>

至少它不会崩溃(我认为它会因为type[0]CT_STRING变成一个不存在的类型)......

bug fread

最有用的评论

@ben519您的数据集仅包含 1 行,因此绝对不是因为样本外不规则。 我为您的错误创建了一个新问题(请参阅上面的链接)

所有3条评论

可能的方法:

  • 引入新的引用规则 QR0(所有其他规则变为 QR1..QR4)。 这将是默认的 QR。 在此规则下,字段可能会或可能不会被引用,但不允许使用内部引用。 因此,以下字段在 QR0 下是可接受的: 1,foo,"","bar",,"baz,baz" ,而这些不是: "foo""bar","foo\"bar",foo"bar,f"oo,bar"
  • 读取文件时,如果某个字段是STRING类型的,在当前二维码下无法读取,则:

    • 如果我们当前在 QR0——点击 QR 直到可以读取该字段,然后继续扫描文件;

    • 否则,点击 QR,然后返回并重新扫描所有字符串字段(因为引号的含义在已读取的数据中已更改)。

  • QR 颠簸具有以下层次结构: QR0 -> {QR1|QR2|QR3} -> QR4

我也遇到这个了,但是报错。

screen shot 2017-11-03 at 1 59 52 pm

fread("foo.csv", select=c("Date", "Description", "Amount"), header = T)  # error
fread("foo.csv", header = T, verbose = F)  # works

screen shot 2017-11-03 at 1 59 03 pm

@ben519您的数据集仅包含 1 行,因此绝对不是因为样本外不规则。 我为您的错误创建了一个新问题(请参阅上面的链接)

此页面是否有帮助?
0 / 5 - 0 等级