2012-10-10 25 views
13

que he visto en varios casos que, si bien read.table() no es capaz de leer un archivo delimitado por tabulador (por ejemplo la mesa de anotación de un microarray) devolver el siguiente error:read.csv vs read.table

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. Creo que también la velocidad de read.csv() también es más alta 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 ningún error.

¿Tiene alguna idea de por qué read.table() no puede leer los mismos archivos que read.csv() trabaja en él? ¿También hay alguna razón para usar read.table() en cualquier caso?

+1

Lea también la página de ayuda para 'read.table()' en el uso de memoria sobre por qué puede parecer lento para archivos grandes. – Chase

+1

no podemos responder su pregunta (actualizada) sin un ejemplo reproducible. Los problemas de lectura más comunes son (1) caracteres de comentario no detectados, (2) comillas sin igual, (3) cambios en el número de campos por línea después de las primeras 5 líneas del archivo cuando 'fill = TRUE'. Debido a que 'read.csv' y' read.table' tienen diferentes valores predeterminados para 'comment',' quote', y 'fill', cualquiera de estos podría ser el problema. –

+1

PD Hay 8 combinaciones de 'comment' /' quote'/'fill': puedes experimentar con todas ellas y ver cómo difieren los resultados, lo que puede llevarte a la respuesta. 'count.fields()' también es útil para el diagnóstico. –

Respuesta

26

read.csv es una envoltura bastante delgada alrededor de read.table; Me sorprendería mucho si no pudiera replicar exactamente el comportamiento de read.csv proporcionando los argumentos correctos al 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, este es el completa definición 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 se ha dicho es sólo read.table con un conjunto determinado de opciones.

Como @Chase afirma en los comentarios a continuación, la página de ayuda para read.table() dice apenas tanto bajo Details:

read.csv and read.csv2 are identical to read.table except for the defaults. They are intended for reading ‘comma separated value’ files (‘.csv’) or (read.csv2) the variant used in countries that use a comma as decimal point and a semicolon as field separator.

+6

Buena respuesta - Solo agregaría que la página de ayuda para' read.table() 'dice igual que en los detalles' read.csv y read.csv2 son idénticos a read.table excepto por los predeterminados. Están pensados ​​para leer archivos 'valores separados por comas' ('.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. Entonces, para el OP - sí, querría 'read.table' cuando sus datos no coinciden con los valores predeterminados para' read.csv' – Chase

+0

Acabo de actualizar la pregunta – Ali

8

No utilice read.table para leer archivos delimitados por tabuladores, utilice read.delim. (Es sólo un envoltorio delgado alrededor read.table pero establece las opciones a los valores apropiados)

0

read_table() qué falla en algún momento en la pestaña sep 'archivo ed y el establecimiento de sep='\s+' puede ayudar asumiendo elemento de la tabla tienen ningún espacio

Cuestiones relacionadas