r file-io read.table read.csv

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