J'ai un fichier CSV (24,1 Mo) que je ne peux pas lire complètement dans ma session R. Lorsque j'ouvre le fichier dans un tableur, je peux voir 112 544 lignes. Quand je le lis dans R avec, read.csv
je n'obtiens que 56,952 lignes et cet avertissement:
cit <- read.csv("citations.CSV", row.names = NULL,
comment.char = "", header = TRUE,
stringsAsFactors = FALSE,
colClasses= "character", encoding= "utf-8")
Warning message:
In scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings, :
EOF within quoted string
Je peux lire tout le fichier en R avec readLines
:
rl <- readLines(file("citations.CSV", encoding = "utf-8"))
length(rl)
[1] 112545
Mais je ne peux pas le ramener dans R en tant que table (via read.csv
):
write.table(rl, "rl.txt", quote = FALSE, row.names = FALSE)
rl_in <- read.csv("rl.txt", skip = 1, row.names = NULL)
Warning message:
In scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings, :
EOF within quoted string
Comment puis-je résoudre ou contourner ce message EOF (qui semble être plus une erreur qu'un avertissement) pour obtenir le fichier entier dans ma R
session?
J'ai des problèmes similaires avec d'autres méthodes de lecture de fichiers CSV:
require(sqldf)
cit_sql <- read.csv.sql("citations.CSV", sql = "select * from file")
require(data.table)
cit_dt <- fread("citations.CSV")
require(ff)
cit_ff <- read.csv.ffdf(file="citations.CSV")
Voici ma sessionInfo ()
R version 3.0.1 (2013-05-16)
Platform: x86_64-w64-mingw32/x64 (64-bit)
locale:
[1] LC_COLLATE=English_United States.1252 LC_CTYPE=English_United States.1252
[3] LC_MONETARY=English_United States.1252 LC_NUMERIC=C
[5] LC_TIME=English_United States.1252
attached base packages:
[1] tools tcltk stats graphics grDevices utils datasets methods base
other attached packages:
[1] ff_2.2-11 bit_1.1-10 data.table_1.8.8 sqldf_0.4-6.4
[5] RSQLite.extfuns_0.0.1 RSQLite_0.11.4 chron_2.3-43 gsubfn_0.6-5
[9] proto_0.3-10 DBI_0.2-7
r
csv
eof
read.table
Ben
la source
la source
fread
travailler dans cette situation? Je préfère ça parce que c'est beaucoup plus rapide queread.csv
. Maisfread
ne semble pas accepter d'quote
argument.fread
cela ne fonctionne pas bien avec les citations intégrées en général, mais je suis sûr qu'il y aura bientôt une solution de contournement. stackoverflow.com/questions/16094025/…write.csv()
et j'en récupérais 403read.csv()
. L'ajout de quote = "" m'a permis d'obtenir jusqu'à 410 lignes.read.table()
ne fait pas mieux. Je me demande quoi d'autre peut être essayé ...Je suis un nouvel utilisateur de R et j'ai pensé publier ceci au cas où cela aiderait quelqu'un d'autre. J'essayais de lire des données à partir d'un fichier texte (séparé par des virgules) contenant quelques caractères espagnols et il m'a fallu une éternité pour le comprendre. Je savais que je devais utiliser l'encodage UTF-8, définir l'argument d'en-tête sur TRUE, et que je devais régler l'argument sep sur ",", mais j'ai quand même eu des raccrochages. Après avoir lu cet article, j'ai essayé de définir l'argument de remplissage sur TRUE, mais j'ai ensuite obtenu le même "EOF dans la chaîne entre guillemets" que j'ai pu corriger de la même manière que ci-dessus. Ma table de lecture réussie ressemble à ceci:
target <- read.table("target2.txt", fill=TRUE, header=TRUE, quote="", sep=",", encoding="UTF-8")
Le résultat a des caractères en espagnol et les mêmes dims que j'avais à l'origine, donc je l'appelle un succès! Merci a tous!
la source
Dans la section d'aide R, comme indiqué ci-dessus, désactivez simplement les guillemets, en ajoutant simplement:
au read.csv () a fonctionné pour moi.
L'erreur "EOF dans la chaîne entre guillemets" s'est produite avec:
Et le fichier lu manquait 6 619 lignes. Mais en désactivant les citations
A fonctionné sans erreur et toutes les lignes ont été lues avec succès.
la source
J'ai également rencontré ce problème et j'ai pu contourner une erreur EOF similaire en utilisant:
Notez que le paramètre de séparation est défini dans le plus général
read.table()
.la source
En fait, utiliser
read.csv()
pour lire un fichier avec un contenu texte n'est pas une bonne idée, désactiver le guillemet comme définiquote=""
n'est qu'une solution temporaire, cela ne fonctionnait qu'avec des guillemets séparés. Il y a d'autres raisons qui pourraient provoquer l'avertissement, comme certains caractères spéciaux.La solution permanente (utiliser
read.csv()
), découvrir ce que sont ces caractères spéciaux et utiliser une expression régulière pour les éliminer est une idée.Avez-vous déjà pensé à installer le package
{data.table}
et à l'utiliserfread()
pour lire le fichier. il est beaucoup plus rapide et ne vous dérangerait pas avec cet avertissement EOF. Notez que le fichier qu'il charge sera stocké en tant qu'objet data.table mais pas en tant qu'objet data.frame. La classe data.table a de nombreuses fonctionnalités intéressantes, mais de toute façon, vous pouvez la transformer en utilisantas.data.frame()
si nécessaire.la source
J'ai eu le même problème: EOF -warning et seule une partie des données se chargeait avec read.csv (). J'ai essayé les quotes = "", mais cela n'a supprimé que l'avertissement EOF.
Mais en regardant la première ligne qui ne se chargeait pas, j'ai trouvé qu'il y avait un caractère spécial, une flèche → (valeur hexadécimale 0x1A) dans l'une des cellules. Après avoir supprimé la flèche, les données se chargent normalement.
la source
J'ai aussi eu le même problème. Mais dans mon cas, la cause du problème était due à la présence d'apostrophes (c.-à-d. Guillemets simples) dans certaines des valeurs de texte. Ceci est particulièrement fréquent lorsque vous travaillez avec des données comprenant des textes en français, par exemple «L'autre jour».
Donc, la solution était simplement d'ajuster le paramètre par défaut de l'argument quote pour exclure le symbole «'», et donc, en utilisant quote = "\" " (c'est-à-dire guillemets doubles uniquement ), tout fonctionnait bien.
J'espère que cela pourra aider certains d'entre vous. À votre santé.
la source
Le package readr résoudra ce problème.
la source