Проблема кодирования с write.xlsx (openxlsx) - PullRequest
0 голосов
/ 12 сентября 2018

Я использую функцию write.xlsx() (из пакета openxlsx), чтобы превратить объект списка в электронную таблицу Excel, где каждый элемент списка преобразуется в «лист» файла Excel. В прошлом эта функция была невероятно полезной, и я никогда не сталкивался с какими-либо проблемами. Насколько я понимаю, этот пакет и его функция, в частности, не нуждаются в каком-либо конкретном обновлении Java на компьютере для его работы.

Однако недавно я обнаружил, что функция выдает ошибку. Вот что говорится в консоли, когда я запускаю write.xlsx () для списка:

Error in gsub("&", "&", v, fixed = TRUE) : 
  input string 5107 is invalid UTF-8

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

Я даже пошел дальше и использовал функцию enc2utf8() для всех столбцов в этом фрейме данных, в частности, но я все еще сталкиваюсь с ошибкой. Я использовал функцию substr() на самом фрейме данных, и он показывает мне первые n символы каждого столбца, хотя я не вижу каких-либо очевидных проблем из вывода.

Я даже пошел дальше и использовал функцию install.packages() для повторной загрузки пакета openxlsx в случае каких-либо обновлений.

Кто-нибудь знает, как мне определить причину ошибки? Это функция, как написано в пакете? Если проблема заключается в кодировании самих данных, не достаточно ли enc2utf8() для решения проблемы?

Спасибо!

1 Ответ

0 голосов
/ 14 сентября 2018

У меня была такая же проблема. Основываясь на этом вопросе , вы можете заменить все плохие символы в кадре данных на:

library(dplyr)
df %>%
  mutate_if(is.character, ~gsub('[^ -~]', '', .))

только для символьных столбцов или:

df %>%
  mutate_all(~gsub('[^ -~]', '', .))  

для всех столбцов, а затем экспортируйте в XLSX с write.xlsx().

...