Data.table: fread Impossible de gérer le champ mal cité s'il est hors échantillon

Créé le 9 juil. 2017  ·  3Commentaires  ·  Source: Rdatatable/data.table

Cet exemple :

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)

produit un message d'erreur qui est trompeur :

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

Au moins, il ne plante pas (ce que je pensais être étant donné que type[0] passe de CT_STRING à un type inexistant)...

bug fread

Commentaire le plus utile

@ ben519 Votre ensemble de données ne contient qu'une ligne, ce n'est donc certainement pas à cause d'irrégularités hors échantillon. J'ai créé un nouveau problème pour votre erreur (voir lien ci-dessus)

Tous les 3 commentaires

Approche possible :

  • Introduisez la nouvelle règle de citation QR0 (toutes les autres règles deviennent QR1..QR4). Ce serait le QR par défaut. Selon cette règle, les champs peuvent ou non être entre guillemets, mais aucun guillemet interne n'est autorisé . Ainsi, les champs suivants sont admissibles sous QR0 : 1,foo,"","bar",,"baz,baz" , alors que ceux-ci ne le sont pas : "foo""bar","foo\"bar",foo"bar,f"oo,bar" .
  • Lors de la lecture d'un fichier, si un champ est de type STRING et ne peut pas être lu sous le QR courant, alors :

    • Si nous sommes actuellement à QR0 -- déplacez le QR jusqu'à ce que le champ puisse être lu, puis continuez à analyser le fichier ;

    • Sinon, cognez le QR, puis revenez en arrière et analysez à nouveau tous les champs de chaîne (puisque la signification des guillemets a changé dans les données déjà lues).

  • Les bosses QR ont la hiérarchie suivante : QR0 -> {QR1|QR2|QR3} -> QR4 .

Je rencontre aussi cela, mais j'obtiens une erreur.

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 Votre ensemble de données ne contient qu'une ligne, ce n'est donc certainement pas à cause d'irrégularités hors échantillon. J'ai créé un nouveau problème pour votre erreur (voir lien ci-dessus)

Cette page vous a été utile?
0 / 5 - 0 notes