Sweave не печатает локализованные символы - PullRequest
6 голосов
/ 08 августа 2010

Я пытаюсь включить некоторые графики из R в свой документ LaTeX через Sweave.

\SweaveOpts{eps = FALSE, pdf = TRUE, echo = FALSE, prefix = TRUE, prefix.string = data}

<<label = abundanca:barplot, fig = TRUE, include = FALSE, results = hide>>=
barplot(abund, xlab="Vzorčne postaje", ylab="Abundanca", main="", col="slategrey", names.arg=c("HM1", "HM2", "HM3", "HM4", "HM5", "HM6", "HM7", "HM8", "HM9", "HM10"))
@

Устройство pdf в Sweave использует собственную кодировку (как установлено в options("encoding")), которая нераспознавать локальные символы (ščćž) в xlab (заменяет их двумя точками).

Я попытался установить опцию для чего-то, что работает в R:

options("encoding" = "CP1250.enc")

, но я получаю ошибку:

Error in file() : unsupported conversion from 'CP1250.enc' to ''

Любые решения, обходные пути ...?

РЕДАКТИРОВАТЬ

Запуск RLW aL3xa через

R CMD Sweave report.Rnw

нене работает.

Запуск того же файла через Eclipse + StatET

Sweave("report.Rnw")

, однако, делает.

Мой .Rnw файл и .pdf .

1 Ответ

3 голосов
/ 08 августа 2010

Это не так просто, как может показаться.Технически, эта проблема зависит от OS / locale / pdf writer / Sweave (см. «Установка и администрирование R», глава 7).Поскольку я использую GNU / Linux, это «решение» не адресовано пользователям Mac и Windows.И чтобы сделать все немного сложнее, дистрибутивы GNU / Linux отличаются, так что есть большая вероятность, что если что-то работает, скажем, на Ubuntu, не работает на Arch Linux.

Я буду использоватьmtcars набор данных.Давайте создадим некоторый базовый график с локализованными символами:

pdf("foo.pdf")
boxplot(mpg ~ cyl, data = mtcars, ylab = "Potrošnja goriva", xlab = "Broj cilindara", main = "Dijagram raspršenja")
dev.off()

(ускоренный курс сербского языка: "Potrošnja goriva" означает расход топлива, "Broj cilindara" означает # цилиндров и "Dijagram"raspršenja "эквивалентен scatterplot)

Теперь я получаю кучу предупреждений:

Warning messages:
1: In title(ylab = "Potrošnja goriva", xlab = "Broj cilindara", main = "Dijagram raspršenja") :
  conversion failure on 'Dijagram raspršenja' in 'mbcsToSbcs': dot substituted for <c5>
2: In title(ylab = "Potrošnja goriva", xlab = "Broj cilindara", main = "Dijagram raspršenja") :
  conversion failure on 'Dijagram raspršenja' in 'mbcsToSbcs': dot substituted for <a1>
3: In title(ylab = "Potrošnja goriva", xlab = "Broj cilindara", main = "Dijagram raspršenja") :
  conversion failure on 'Dijagram raspršenja' in 'mbcsToSbcs': dot substituted for <c5>
4: In title(ylab = "Potrošnja goriva", xlab = "Broj cilindara", main = "Dijagram raspršenja") :
  conversion failure on 'Dijagram raspršenja' in 'mbcsToSbcs': dot substituted for <a1>
5: In title(ylab = "Potrošnja goriva", xlab = "Broj cilindara", main = "Dijagram raspršenja") :
  conversion failure on 'Potrošnja goriva' in 'mbcsToSbcs': dot substituted for <c5>
6: In title(ylab = "Potrošnja goriva", xlab = "Broj cilindara", main = "Dijagram raspršenja") :
  conversion failure on 'Potrošnja goriva' in 'mbcsToSbcs': dot substituted for <a1>
7: In title(ylab = "Potrošnja goriva", xlab = "Broj cilindara", main = "Dijagram raspršenja") :
  conversion failure on 'Potrošnja goriva' in 'mbcsToSbcs': dot substituted for <c5>
8: In title(ylab = "Potrošnja goriva", xlab = "Broj cilindara", main = "Dijagram raspršenja") :
  conversion failure on 'Potrošnja goriva' in 'mbcsToSbcs': dot substituted for <a1>

Хотя options(encoding = "CP1250") не помогает, я получаю те же предупреждения,pdf.options(encoding = "CP1250") исправляет это, и то же самое означает pdf(file = "foo.pdf", encoding = "CP1250").Итак, я вернусь к своей старой кодировке с помощью options(encoding = "native.enc"), установлю pdf.options, как уже было сказано выше, и все получится правильно.

Некоторые пользователи уходят, просто установив pdf.options, и не получают проблем с Sweave,Таким образом, вы должны вставить эту часть кода где-нибудь в файл .Rnw, прежде чем начать рисование:

<<setOptions, echo = FALSE, results = hide>>==
pdf.options(encoding = "CP1250")
@

и позже, просто выполните:

<<plotTheFigure, echo = TRUE, fig = TRUE>>==
# I've set echo to TRUE intentionally, to prove my point here
boxplot(mpg ~ cyl, data = mtcars, ylab = "Potrošnja goriva", xlab = "Broj cilindara", main = "Dijagram raspršenja")
@

И тот же сценарий стоитдля графиков ggplot2.

Некоторые из вас получат правильный вывод, а я нет!И, как я уже говорил, если вы работаете в Ubuntu, есть большой шанс, что это сработает, но сейчас я не могу заставить его выжить и пнуть в Arch.

ИСохраняя нажатия клавиш, вы можете загрузить Sweave-файл и / или PDF-файл (выполняется на компьютере Arch).Как видите, локализованные символы правильно отображаются в функции сюжета, но искажаются в Sweave.Теперь, если я пытаюсь сохранить график в файл PDF (без Sweaving), я получаю правильный вывод .

Итак, я решил некоторые проблемы, но есть много пробныхОсталось выполнить задание с ошибкой.

Пожалуйста, запустите файл .Rnw на своем компьютере и дайте мне некоторую обратную связь.Чтобы упростить задачу, я создал Rscript, который собирает вашу системную информацию (не личную информацию), которую я считаю уместной в данном случае: здесь ' source , а вот мой output .

...