Подтвердить что ты не робот

Read.csv vs. read.table

В нескольких случаях я видел, что в то время как read.table() не может читать файл с разделителями табуляции (например, таблицу аннотаций микрочипа), возвращается следующая ошибка:

Error in scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings,  : 
line xxx did not have yyy elements

read.csv() отлично работает в одном файле без ошибок. Я думаю, что скорость read.csv() также выше, чем read.table().

Еще больше: read.table() делает очень сумасшедший, читая файл со мной. Он делает эту ошибку при чтении строки 100, но когда я копирую и вставляю строки от 90 до 110 сразу после главы того же файла, она по-прежнему делает ошибку строки 100 + 21 (новые строки копируются в начале). Если в этой строке есть какие-либо проблемы, почему она не сообщает об этой ошибке при чтении вставленной строки в начале? Я подтверждаю, что read.csv() читает тот же файл без ошибок.

У вас есть представление о том, почему read.table() не может прочитать те же файлы, что и read.csv() работает на нем? Также есть ли какая-либо причина использовать read.table() в любом случае?

4b9b3361

Ответ 1

read.csv - довольно тонкая обертка вокруг read.table; Я был бы очень удивлен, если бы вы не смогли точно воспроизвести поведение read.csv, предоставив правильные аргументы read.table. Однако некоторые из этих аргументов (например, способ обращения к кавычками или комментариям) могут изменить скорость и поведение функции.

В частности, это полное определение 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, ...)
}

так как он указал только read.table с определенным набором опций.

Как указано в @Chase в комментариях ниже, страница справки для read.table() говорит так же, как в Details:

read.csv и read.csv2 идентичны read.table, за исключением значений по умолчанию. Они предназначены для чтения "файлов с разделителями-запятыми (".csv ") или (read.csv2) вариант, используемый в странах, которые используют запятую в качестве десятичной точки и точку с запятой в качестве разделителя полей.

Ответ 2

Не используйте read.table для чтения файлов с разделителями табуляции, используйте read.delim. (Это всего лишь тонкая оболочка вокруг read.table, но она устанавливает параметры для соответствующих значений)

Ответ 3

read_table() выполняется некорректно на вкладке sep 'ed файл и установка sep='\s+' может помочь предположить, что элемент в вашей таблице не имеет места