Может ли сканирование (или любая другая функция импорта) возвращать частичные результаты после того, как возникнут ошибки? - PullRequest
4 голосов
/ 24 сентября 2010

Могу ли я что-то сделать, чтобы получить частичные результаты после столкновения с ошибками в большом файле? Я использую следующую команду для импорта данных из файлов. Это самый быстрый способ, который я знаю, но он не надежный. Это может легко испортить все из-за маленькой ошибки. Я надеюсь, что, по крайней мере, есть способ, которым сканирование (или любой читатель) может быстро вернуть, какая строка / строка имеет ошибку, или частичные результаты, которые она прочитала (чем я буду иметь представление, где ошибка). Затем я могу пропустить достаточно строк, чтобы восстановить более 99% хороших данных.

rawData = scan(file = "rawData.csv", what = scanformat, sep = ",", skip = 1, quiet = TRUE, fill = TRUE, na.strings = c("-", "NA", "Na","N"))

Все учебники по импорту данных, которые я нашел, предполагают, что файлы в хорошем состоянии. Я не нашел полезного совета, чтобы иметь дело с грязными файлами.

Буду искренне признателен за любую подсказку или предложение! Это было действительно неприятно.

Ответы [ 2 ]

2 голосов
/ 24 сентября 2010

Функция count.fields будет предварительно обрабатывать файл, подобный таблице, и сообщать вам, сколько полей было найдено в каждой строке (в том смысле, что read.table будет искать поля). Часто это быстрый способ определить строки, в которых возникла проблема, поскольку в них будет отображаться количество полей, отличное от ожидаемого (или просто отличающееся от большинства других строк).

2 голосов
/ 24 сентября 2010

Idea1: открыть файловое соединение (с функцией file), а затем scan построчно (с nlines=1). Поместите каждый scan в try для восстановления после прочтения неверной строки.

Idea2: используйте readLines для чтения файла в необработанном формате; затем используйте strsplit для разбора. Вы можете проанализировать этот вывод, чтобы найти плохие строки и удалить его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...