tryCatch - withCallingHandlers - восстановить после ошибки - PullRequest
0 голосов
/ 12 апреля 2020

У меня есть CSV-файл (приблизительно 1000 строк) с некоторыми примерами данных. при чтении csv с read.table

  read.table(csv_File,header = FALSE, sep=",",na.strings = '')

Я получил ошибку,

Error in scan(file = file, what = what, sep = sep, quote = quote, dec = dec,  : 
    line 515 did not have 5 elements

Есть ли способ, используя tryCatch и withCallingHandlers, распечатать это сообщение об ошибке и продолжить с остальной частью файла?

все, что я ожидаю, это получить сообщения об ошибках / трассировку стека в случае ошибок и обработать оставшиеся строки в csv.

1 Ответ

2 голосов
/ 12 апреля 2020

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

fields <- count.fields(csv_File, sep = ",")
bad <- fields != 5
lines <- readLines(csv_File)

# At this point you could display the bad lines or
# give some other information about them.

# Then delete them and read again:

lines <- lines[!bad]
f <- tempfile()
writeLines(lines, f)
read.table(f, header = FALSE, sep=",", na.strings = '')
unlink(f)

ИЗМЕНЕНО для добавления:

Следует отметить, что пакет readr работает лучше, когда файлы содержат проблемы. Если вы используете

library(readr)
read_csv(csv_File, col_names = FALSE)

, вместо фрейма данных будет выдан «тиббл», но в противном случае он должен делать то, что вы хотите. О каждой строке, в которой возникли проблемы, будет сообщено, и общие проблемы будут сохранены в наборе данных, если вы захотите изучить их позже.

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