readr read_fwf странная ошибка синтаксического анализа: встроенный ноль - PullRequest
0 голосов
/ 11 января 2020

Я пытаюсь использовать readr::read_fwf для чтения .txt файла. Я знаю все значения ширины столбца, но получаю эту ошибку синтаксического анализа, которую я не знаю, как ее устранить:

 fwf_widths <- c(12, 2, 6, ...) 
 fwf_names <- c("V1", "V2", "V3", ...)
 col_types <- c("ccc...")

 df <- read_fwf(file = file, fwf_widths(fwf_widths, fwf_names), 
                         col_types = col_types)
Warning: 1 parsing failure.
row         col expected        actual        file                                                                         

372722 description          embedded null     /path/to/my/file.txt

Я попытался добавить trim_ws = T, что не устраняет ошибку. Я посмотрел на фактическое содержимое df[372722, ] и похоже, что description содержит правильное содержимое. Может кто-нибудь помочь мне объяснить, что означает embedded null и как я могу потенциально решить эту проблему?

1 Ответ

0 голосов
/ 11 января 2020

Один из байтов в вашем fwf является байтом нулевого значения, что недопустимо в строке символов R. Если вы просто удалите его, вы уничтожите выравнивание последующих записей в fwf, поэтому вам нужно заменить его. Следующая функция по умолчанию записывает пробел в любом месте с нулевым байтом.

Перед использованием этого .

replace_null <- function(path_to_file, file_size = 10000000L, replace_with = ' ')
{
  file_data <- readBin(path_to_file, "raw", file_size)
  file_data[data == as.raw(0)] <- as.raw(as.numeric(charToRaw(replace_with)))
  writeBin(file_data, path_to_file)
}
* 1007 создайте резервную копию файла .fwf. Теперь вы просто нужно сделать
replace_null(file_path)

и тогда ваш собственный код должен работать. Если этого не произойдет, ваш fwf должен быть поврежден.

...