read.csv vs. read.table
file-io (3)
He visto en varios casos que mientras read.table()
no puede leer un archivo delimitado por tabuladores (por ejemplo, la tabla de anotaciones de un microarray) devuelve el siguiente error:
Error in scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings, :
line xxx did not have yyy elements
read.csv()
funciona perfectamente en el mismo archivo sin errores. También creo que la velocidad de read.csv()
también es mayor que read.table()
.
Aún más: read.table()
está muy loco leyendo un archivo de mí. Hace este error al leer la línea 100, pero cuando copio y pego las líneas 90 a 110 justo después del encabezado del mismo archivo, sigue cometiendo un error de la línea 100 + 21 (nuevas líneas copiadas al principio). Si hay algún problema con esa línea, ¿por qué no informa ese error mientras lee la línea pegada al principio? Confirmo que read.csv()
lee el mismo archivo sin error.
¿Tiene alguna idea de por qué read.table()
no puede leer los mismos archivos que read.csv()
funciona en él? ¿También hay alguna razón para usar read.table()
en cualquier caso?
No use read.table
para leer archivos delimitados por tabulaciones, use read.delim
. (Es solo una capa delgada alrededor de read.table
pero establece las opciones a los valores apropiados)
read.csv
es un contenedor bastante fino alrededor de read.table
; Me sorprendería mucho si no pudiera replicar exactamente el comportamiento de read.csv
proporcionando los argumentos correctos para read.table
. Sin embargo, algunos de esos argumentos (como la forma en que se manejan las comillas o los caracteres de comentario) podrían cambiar la velocidad y el comportamiento de la función.
En particular, esta es la definición completa de read.csv
:
function (file, header = TRUE, sep = ",", quote = "/"", dec = ".",
fill = TRUE, comment.char = "", ...) {
read.table(file = file, header = header, sep = sep, quote = quote,
dec = dec, fill = fill, comment.char = comment.char, ...)
}
así como lo read.table
es solo read.table
con un conjunto particular de opciones.
Como dice @Chase en los comentarios a continuación, la página de ayuda para read.table()
dice igual en Details
:
read.csv y read.csv2 son idénticos a read.table excepto los valores predeterminados. Están pensados para leer archivos ''valor separado por coma'' (''.csv'') o (read.csv2) la variante utilizada en países que usan una coma como punto decimal y un punto y coma como separador de campo.
read_table()
falla en algún momento en el archivo tabulado y la configuración sep=''/s+''
puede ayudar a asumir que el elemento en su tabla no tiene espacio