Есть ли способ save
R объектов переносимым способом, чтобы кодирование сохранялось при перемещении файла из Windows в Linux или обратно?
Например, предположим, у меня есть этот простой data.frame (созданный в R 3.4.1 с Rstudio 1.0.153 / Windows 10)
# I did this part on a Windows machine
df <- data.frame(Õ = 1:5, Ä = c("õäöü", "baa", "mää", "muu", "näu"))
save(df, file="baa.rda")
Ссылка на файл save
на окнах: baa.rda
Чтение этого на машине с Linux (R 3.2.5, RStudio 1.0.136, Linux Mint Debian Edition) приведет к ...
# now on Linux ...
load("baa.rda")
df
# \xd5 \xc4
# 1 1 \xf5\xe4\xf6\xfc
# 2 2 baa
# 3 3 m\xe4\xe4
# 4 4 muu
# 5 5 n\xe4u
Итак, чтобы преобразовать его обратно в исходную форму, я могу использовать что-то вроде ...
names(df) <- iconv(names(df), from="WINDOWS-1252", to="UTF-8")
# [1] "Õ" "Ä"
df$Ä <- iconv(df$Ä, from="WINDOWS-1252", to="UTF-8")
# df$Ä
# [1] "õäöü" "baa" "mää" "muu" "näu"
При движении в противоположном направлении (LMDE -> Windows) путаются только имена столбцов, и, опять же, это можно исправить с помощью iconv
:
> names(df2)
[1] "Õ" "Ä"
> iconv(names(df2), from="UTF-8", to="WINDOWS-1252")
[1] "Õ" "Ä"
Проблема исчезнет, если я прочитаю данные из текстовых файлов (например, csv) и укажу правильное fileEncoding
..., так что это может быть решением. Или написание функции для iconv
всего в одном кадре.
Но есть ли более простой способ сделать это? (То есть сохранить фрейм данных на одной платформе и прочитать его на другой, не беспокоясь о том, как был закодирован текст.)
И связанный с этим вопрос: включена ли информация о (предполагаемом) кодировании при save
использовании R-объектов?