【发布时间】:2012-11-06 13:03:12
【问题描述】:
环境:
Mac OS 10.8.2 上的 R v. 2.15.1,平台 x86_64-apple-darwin9.8.0/x86_64(64 位),RStudio IDE 设置为使用 UTF-8 作为其默认编码。操作系统也使用 UTF-8。
> Sys.getlocale(category = "LC_ALL")
[1] "sk_SK.UTF-8/sk_SK.UTF-8/sk_SK.UTF-8/C/sk_SK.UTF-8/sk_SK.UTF-8"
目标:
从 R HTML (.Rhtml) 文件生成一个 HTML 文件,其中包含带有扩展拉丁字符的绘图,例如 š 或 č。
问题:
当我点击 Knit HTML 时,输出如下所示:
plot(1:2, main = "šč")
## Warning: conversion failure on 'šč' in 'mbcsToSbcs': dot substituted for
##
## Warning: conversion failure on 'šč' in 'mbcsToSbcs': dot substituted for
##
## Warning: conversion failure on 'šč' in 'mbcsToSbcs': dot substituted for
##
## Warning: conversion failure on 'šč' in 'mbcsToSbcs': dot substituted for
## <8d>
**Plot with correct characters despite the warnings.**
问题:
是什么导致了问题以及如何解决?我怎样才能至少摆脱结果文件中显示的警告?
绝望的笔记:
过去一两个小时我一直在寻找解决方案,发现了许多类似的案例并尝试了许多不同的潜在解决方案(许多与 PDF 输出有关,如果我只使用 Sweave,就会出现同样的问题),现在我真的绝望了。
2012 年 11 月 9 日编辑:
@metasequoia 建议的使用Encoding() 的解决方案确实有效,但考虑到也需要打印代码,最好没有该功能,我更喜欢@nograpes 使用函数pdf.options() 提供的解决方案。
有趣的是,虽然
<!--begin.rcode
pdf.options(encoding='ISOLatin2.enc')
plot(cars, main="Ťažký")
end.rcode-->
产生相同的警告,
<!--begin.rcode
pdf.options(encoding='ISOLatin2.enc')
end.rcode-->
<!--begin.rcode
plot(cars, main="Ťažký")
end.rcode-->
按预期工作。 为什么会这样?我认为在 R 中运行命令时,年表才是最重要的。
所以,我的目的的明确解决方案是把
<!--begin.rcode echo="FALSE"
pdf.options(encoding='ISOLatin2.enc')
end.rcode-->
在我的每个代码的开头。
【问题讨论】:
-
可能不是你要找的东西,但是在
suppressWarnings中包装 plot 调用呢 -
如果没有可重现的示例,我无法测试解决方案。但是,您可以考虑使用
Encoding()声明您的编码 -
@RomainFrancois 谢谢你的建议。当我不必打印代码时它很有用,但是如果我这样做,封装也是可见的。有没有办法在全球范围内禁止警告?
-
我能够在 Ubuntu 中重现此问题。我在 Windows 中遇到不同的错误,但类似。编辑您的问题并提供输入文件 (
test.Rhtml) 的示例,例如:<!--begin.rcode plot(1:2, main = "šč") end.rcode-->和类似的命令:library(knitr);knit('test.Rhtml')以及输出示例,包括:<div class="warning"><pre class="knitr r">## Warning: conversion failure on 'šč' in 'mbcsToSbcs': dot substituted for ## <c5> -
我相信这个错误与
pdf设备中的问题有关。您可以使用pdf();plot(1:2,main="šč");dev.off()快速重现错误