Data.table: fread Incapaz de manipular o campo mal cotado se estiver fora da amostra

Criado em 9 jul. 2017  ·  3Comentários  ·  Fonte: Rdatatable/data.table

Este exemplo:

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)

produz uma mensagem de erro que é enganosa:

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

Pelo menos ele não trava (o que eu pensei que aconteceria, já que type[0] foi transferido de CT_STRING para um tipo inexistente) ...

bug fread

Comentários muito úteis

@ ben519 Seu conjunto de dados contém apenas 1 linha, então definitivamente não é por causa de irregularidades fora da amostra. Eu criei um novo problema para o seu erro (veja o link acima)

Todos 3 comentários

Abordagem possível:

  • Introduzir a nova regra de cotação QR0 (todas as outras regras tornam-se QR1..QR4). Este seria o QR padrão. Sob esta regra, os campos podem ou não ser citados, mas não são permitidas aspas internas . Assim, os seguintes campos são admissíveis em QR0: 1,foo,"","bar",,"baz,baz" , mas não: "foo""bar","foo\"bar",foo"bar,f"oo,bar" .
  • Ao ler um arquivo, se algum campo for do tipo STRING e não puder ser lido no QR atual, então:

    • Se estivermos atualmente no QR0 - bata no QR até que o campo possa ser lido, então continue digitalizando o arquivo;

    • Caso contrário, altere o QR, mas volte e verifique novamente todos os campos de string (uma vez que o significado das aspas mudou nos dados que já foram lidos).

  • As saliências QR têm a seguinte hierarquia: QR0 -> {QR1|QR2|QR3} -> QR4 .

Também estou encontrando isso, mas estou obtendo um erro.

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 Seu conjunto de dados contém apenas 1 linha, então definitivamente não é por causa de irregularidades fora da amostra. Eu criei um novo problema para o seu erro (veja o link acima)

Esta página foi útil?
0 / 5 - 0 avaliações