Любой способ заставить fread() data.table не останавливаться на пустых строках?

(очень простой вопрос - но я не смог найти ответ в справке fread)...

Итак, у меня есть таблица с несколькими пустыми строками в середине. Когда я пытаюсь открыть его с помощью fread, он останавливается, говоря Stopped reading at empty line 10006, but text exists afterwards (discarded). Есть ли способ избежать этого без изменения файла данных?

Ответы

Ответ 1

Версия 1.9.8 таблицы данных, выпущенная 25 ноября-2016, имеет новую опцию blank.lines.skip для пропуска пустых строк.

text <- "1,a\n\n2,b\n3,c\n4,a\n\n5,b\n\n6,c"

library(data.table)
fread(text)
##    V1 V2
## 1:  2  b
## 2:  3  c
## 3:  4  a
## Warning message:
## In fread("1,a\n\n2,b\n3,c\n4,a\n\n5,b\n\n6,c") :
##   Stopped reading at empty line 6 but text exists afterwards (discarded): 5,b

fread(text, blank.lines.skip=TRUE)
##    V1 V2
## 1:  1  a
## 2:  2  b
## 3:  3  c
## 4:  4  a
## 5:  5  b
## 6:  6  c

Ответ 2

Вы можете использовать команду Windows findstr, чтобы избавиться от пустых строк.

Пример файла "Data.txt".

1,a

2,b
3,c
4,a


5,b

6,c

Воспроизводит вашу ошибку.

> dt <- fread("Data.txt")
Warning message:
In fread("Data.txt") :
Stopped reading at empty line 6 of file, but text exists afterwards (discarded): 5,b

Но работает при использовании Windows findstr непосредственно в fread.

> require(data.table)
> dt <- fread('findstr "." Data.txt')

# > dt
#    V1 V2
# 1:  1  a
# 2:  2  b
# 3:  3  c
# 4:  4  a
# 5:  5  b
# 6:  6  c

Ответ 3

Если у кого-то есть аналогичная проблема, я заметил, что data.table 1.10.4 (текущий выпуск 2017, который я использую), по-видимому, создает пустые ошибки строки с некоторыми файлами, если вы явно не заявляете:

'strip.white = FALSE'

Я смотрел на то, что было явно линейными ошибками в ~ 350 файлах, которые я пытался импортировать. Некоторые строки были разбиты на две строки в оригиналах и, поскольку они содержали различные формы информации, fread предупреждал о проблемах с классом для некоторых столбцов. Но я одновременно получал ошибки "пустой строки" почти для каждого файла, на разных строках. Я вручную проверил их в блокноте ++. Много раз. Пустых линий не было и остались линии; многие из них. Пробовал работать с аргументами импорта и отключил специально strip.white, удалил предупреждения о пустых строках.