6

我正在尝试通过 Sweave 将 R 中的一些图合并到我的 LaTeX 文档中。

\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"))
@

Sweave 中的 pdf 设备使用本机编码(在 中设置options("encoding")),它不能识别 xlab 中的本地字符 (ščćž)(用两个点替换它们)。

我尝试将选项设置为在 R 中有效的选项:

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

但我收到一个错误:

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

任何解决方案,解决方法...?

编辑

运行 aL3xa 的 Rnw

R CMD Sweave report.Rnw

不起作用。

通过 Eclipse+StatET 运行同一个文件

Sweave("report.Rnw")

但是,确实如此。

我的.Rnw文件和一个.pdf

4

1 回答 1

3

这并不像看起来那么简单。从技术上讲,这个问题取决于 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”相当于散点图)

现在,我收到一堆警告:

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 来收集我认为在这种情况下相关的系统信息(不是个人信息):here' the source,here's my output

于 2010-08-08T15:36:16.103 回答