lire.csv avertissement "du FOLKLORE au sein de chaîne de caractères entre guillemets' empêche de terminer la lecture de fichier
j'ai un fichier CSV (24.1 MB) que je ne peut lire dans mes R de la session. Quand j'ouvre le fichier dans un programme de 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 le dossier entier dans R avec readLines
:
rl <- readLines(file("citations.CSV", encoding = "utf-8"))
length(rl)
[1] 112545
mais je ne peux pas obtenir ce retour dans R comme une 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 session R
?
j'ai des problèmes similaires avec d'autres méthodes de lecture des 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
7 réponses
vous devez désactiver la citation.
cit <- read.csv("citations.CSV", quote = "",
row.names = NULL,
stringsAsFactors = FALSE)
str(cit)
## 'data.frame': 112543 obs. of 13 variables:
## $ row.names : chr "10.2307/675394" "10.2307/30007362" "10.2307/4254931" "10.2307/20537934" ...
## $ id : chr "10.2307/675394\t" "10.2307/30007362\t" "10.2307/4254931\t" "10.2307/20537934\t" ...
## $ doi : chr "Archaeological Inference and Inductive Confirmation\t" "Sound and Sense in Cath Almaine\t" "Oak Galls Preserved by the Eruption of Mount Vesuvius in A.D. 79_ and Their Probable Use\t" "The Arts Four Thousand Years Ago\t" ...
## $ title : chr "Bruce D. Smith\t" "Tomás Ó Cathasaigh\t" "Hiram G. Larew\t" "\t" ...
## $ author : chr "American Anthropologist\t" "Ériu\t" "Economic Botany\t" "The Illustrated Magazine of Art\t" ...
## $ journaltitle : chr "79\t" "54\t" "41\t" "1\t" ...
## $ volume : chr "3\t" "\t" "1\t" "3\t" ...
## $ issue : chr "1977-09-01T00:00:00Z\t" "2004-01-01T00:00:00Z\t" "1987-01-01T00:00:00Z\t" "1853-01-01T00:00:00Z\t" ...
## $ pubdate : chr "pp. 598-617\t" "pp. 41-47\t" "pp. 33-40\t" "pp. 171-172\t" ...
## $ pagerange : chr "American Anthropological Association\tWiley\t" "Royal Irish Academy\t" "New York Botanical Garden Press\tSpringer\t" "\t" ...
## $ publisher : chr "fla\t" "fla\t" "fla\t" "fla\t" ...
## $ type : logi NA NA NA NA NA NA ...
## $ reviewed.work: logi NA NA NA NA NA NA ...
je pense que c'est à cause de ce genre de lignes (cochez "Thorn" et "moins")
readLines("citations.CSV")[82]
[1] "10.2307/3642839,10.2307/3642839\t,\"Thorn\" and \"Minus\" in Hieroglyphic Luvian Orthography\t,H. Craig Melchert\t,Anatolian Studies\t,38\t,\t,1988-01-01T00:00:00Z\t,pp. 29-42\t,British Institute at Ankara\t,fla\t,\t,"
je suis un nouvel utilisateur et j'ai pensé poster ceci au cas où ça aiderait quelqu'un d'autre. J'ai essayé de lire dans les données d'un fichier texte (séparé par des virgules) qui comprenait quelques Caractères espagnols et il m'a fallu une éternité pour le comprendre. Je savais que j'avais besoin d'utiliser l'encodage UTF-8, la tête arg pour VRAI, et que j'ai besoin de la sep arguemnt ",", mais j'ai toujours hang ups. après la lecture de ce post j'ai essayé de mettre le remplissage arg à vrai, mais puis obtenu le même "EOF within quoted string" que j'ai pu corriger de la même manière que ci-dessus. Ma réussite en lecture.le tableau ressemble à ceci:
target <- read.table("target2.txt", fill=TRUE, header=TRUE, quote="", sep=",", encoding="UTF-8")
le résultat a des Caractères espagnols et les mêmes dims que j'avais à l'origine, donc je l'appelle un succès! Merci à tous!
dans la section R help, comme indiqué ci-dessus, il suffit de désactiver la citation tout à fait, en ajoutant simplement:
quote = ""
à lire.csv() a travaillé pour moi.
l'erreur, "EOF within quoted string", s'est produite avec:
> iproscan.53A.neg = read.csv("interproscan.53A.neg.n.csv",
+ colClasses=c(pb.id = "character",
+ genLoc = "character",
+ icode = "character",
+ length = "character",
+ proteinDB = "character",
+ protein.id = "character",
+ prot.desc = "character",
+ start = "character",
+ end = "character",
+ evalue = "character",
+ tchar = "character",
+ date = "character",
+ ipro.id = "character",
+ prot.name = "character",
+ go.cat = "character",
+ reactome.id= "character"),
+ as.is=T,header=F)
Warning message:
In scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings, :
EOF within quoted string
> dim(iproscan.53A.neg)
[1] 69383 16
et qu'il manquait 6 619 lignes dans le dossier. Mais en désactivant la citation
> iproscan.53A.neg = read.csv("interproscan.53A.neg.n.csv",
+ colClasses=c(pb.id = "character",
+ genLoc = "character",
+ icode = "character",
+ length = "character",
+ proteinDB = "character",
+ protein.id = "character",
+ prot.desc = "character",
+ start = "character",
+ end = "character",
+ evalue = "character",
+ tchar = "character",
+ date = "character",
+ ipro.id = "character",
+ prot.name = "character",
+ go.cat = "character",
+ reactome.id= "character"),
+ as.is=T,header=F,**quote=""**)
>
> dim(iproscan.53A.neg)
[1] 76002 16
a fonctionné sans erreur et toutes les lignes ont été lues avec succès.
en fait, l'utilisation de read.csv()
pour lire un fichier avec le contenu du texte n'est pas une bonne idée, désactiver la citation comme ensemble quote=""
est seulement une solution temporaire, il n'a fonctionné avec des guillemets séparés. Il y a d'autres raisons qui pourraient causer l'avertissement, comme certains caractères spéciaux.
la solution permanente (en utilisant read.csv()
), trouver 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 paquet {data.table}
et utiliser fread()
pour lire le fichier. il est beaucoup plus rapide et ne vous ennuierait pas avec cet avertissement EOF. Notez que le fichier qu'il charge sera stocké sous forme de données.objet de table mais pas de données.objet frame. Données de la classe.table a beaucoup de bonnes caractéristiques, mais de toute façon, vous pouvez le transformer en utilisant as.data.frame()
si nécessaire.
j'ai aussi rencontré ce problème, et j'ai pu contourner une erreur similaire en utilisant:
read.table("....csv", sep=",", ...)
notez que le paramètre du séparateur est défini dans le cadre plus général read.table()
.
j'ai eu le même problème: EOF-warning et seulement une partie des données était chargée avec read.csv (). J'ai essayé les guillemets="", mais ça n'a enlevé que L'EOF-warning.
mais en regardant la première rangée qui ne chargeait pas, j'ai trouvé qu'il y avait un caractère spécial, une flèche → (valeur hexadécimale 0x1A) dans une des cellules. Après avoir supprimé la flèche j'ai obtenu les données à charger normalement.
moi aussi j'ai eu le même problème. Mais dans mon cas, la cause de la question était due à la présence d'apostrophes (c.-à-d. des guillemets simples) dans certaines des valeurs du texte. Cela est particulièrement fréquent lorsqu'on travaille avec des données, y compris des textes en français, par exemple "l'autre jour".
ainsi, la solution était simplement d'ajuster le réglage par défaut de l'argument de citation pour exclure le symbole"'", et donc, en utilisant quote = " \ " (c.-à-d. double citation mark seulement ), tout fonctionnait très bien.
j'espère que cela peut aider certains d'entre vous. Acclamation.