La advertencia read.csv ''EOF dentro de la cadena entre comillas'' impide la lectura completa del archivo
read.table (6)
Tengo un archivo CSV (24.1 MB) que no puedo leer completamente en mi sesión R. Cuando abro el archivo en un programa de hoja de cálculo, puedo ver 112.544 filas. Cuando lo leí en R con read.csv
solo obtengo 56,952 filas y esta advertencia:
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
Puedo leer todo el archivo en R con readLines
:
rl <- readLines(file("citations.CSV", encoding = "utf-8"))
length(rl)
[1] 112545
Pero no puedo devolver esto a R como una tabla (a través de 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
¿Cómo puedo resolver o solucionar este mensaje EOF (que parece ser más un error que una advertencia) para obtener todo el archivo en mi sesión R
?
Tengo problemas similares con otros métodos de lectura de archivos 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")
Aquí está mi 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
En la sección de ayuda de R, como se señaló anteriormente, simplemente deshabilite las citas por completo, simplemente agregando:
quote = ""
al read.csv () funcionó para mí.
El error, "EOF dentro de la cadena citada", ocurrió con:
> 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
Y al archivo leído faltaban 6.619 líneas. Pero al deshabilitar las citas
> 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
Funcionó sin error y todas las líneas se leyeron con éxito.
En realidad, usar read.csv()
para leer un archivo con contenido de texto no es una buena idea, desactive la cita ya que set quote = "" es solo una solución temporal, solo funcionó con comillas separadas. Hay otras razones que causarían la advertencia, por ejemplo, algunos caracteres especiales.
así que con estos casos de personajes especiales, la solución permanente es verificar su archivo para descubrir cuáles son esos caracteres especiales y usar expresiones regulares para eliminarlos.
¿Alguna vez pensaste en instalar el paquete {data.table}
y usar fread()
para leer el archivo? es mucho más rápido y no te molestaría con esta advertencia EOF. tenga en cuenta que el archivo que leyó no es una clase data.frame, data.table
tiene muchas buenas características, pero puede cambiarlo usando as.data.frame()
si es necesario.
Necesita desactivar las cotizaciones.
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 ...
Creo que es por este tipo de líneas (revisa "Thorn" y "Minus")
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,"
Soy un usuario R nuevo y pensé en publicarlo en caso de que ayudara a alguien más. Intenté leer los datos de un archivo de texto (separado con comas) que incluía algunos caracteres en español y me llevó mucho tiempo resolverlo. Sabía que necesitaba usar la codificación UTF-8, establecer el argumento arg en VERDADERO, y que tengo que establecer el argumento sep a ",", pero aún así tengo inconvenientes. Después de leer esta publicación intenté configurar el fill arg en TRUE, pero luego obtuve el mismo "EOF dentro de la cadena citada", que pude corregir de la misma manera que la anterior. Mi read.table exitosa se ve así:
target <- read.table("target2.txt", fill=TRUE, header=TRUE, quote="", sep=",", encoding="UTF-8")
¡El resultado tiene caracteres en español y los mismos dims que tenía originalmente, así que lo estoy llamando un éxito! ¡Gracias a todos!
También encontré este problema, y pude solucionar un error EOF similar usando:
read.table("....csv", sep=",", ...)
Tenga en cuenta que el parámetro separador se define dentro del read.table()
más general.
Tuve el problema similar: EOF-warning y solo parte de los datos se cargaban con read.csv (). Probé las comillas = "", pero solo eliminó la advertencia de EOF.
Pero mirando la primera fila que no estaba cargando, encontré que había un carácter especial, una flecha → (valor hexadecimal 0x1A) en una de las celdas. Después de eliminar la flecha, obtuve los datos para cargar normalmente.