14

環境:

Mac OS 10.8.2、プラットフォームx86_64-apple-darwin9.8.0 / x86_64(64ビット)のR v。2.15.1、デフォルトのエンコーディングとしてUTF-8を使用するように設定されたRStudioIDE。OSも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.**

質問:

問題の原因とその解決方法は?結果のファイルに表示される警告を少なくとも取り除くにはどうすればよいですか?

絶望的なメモ:

私は過去1〜2時間解決策を探していて、多くの同様のケースを見つけ、多くの異なる潜在的な解決策を試しました(多くは、Sweaveだけを使用した場合と同じようにコックアップされるPDF出力に関連しています)。絶望的。

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-->

私の各コードの冒頭に。

4

3 に答える 3

7

@metasequoiaからの回答は機能しますが、いくつかポイントを追加したいと思います。PDFオプションを別のエンコーディングに設定した場合、すべての出力テキストをでラップする必要はありませんEncodingKnit HTMLをクリックする前にこれを実行します:

pdf.options(encoding='ISOLatin2.enc')

Ripleyは、特にPDFに関連するエンコードの問題について、ここの投稿で説明しています。興味深いかもしれません。特に、エンコーディングはまったく異なる方法で処理されるため、このエラーはWindowsでは同じようには発生しません。

他の言語では別のエンコーディングファイルが必要になる場合がありますが、これはスロバキア語では機能するようです。

于 2012-11-08T23:17:26.657 に答える
7

あなたが見つけた解決策を説明するためだけに:

<!--begin.rcode
pdf.options(encoding='ISOLatin2.enc')
end.rcode-->

<!--begin.rcode
plot(cars, main="Ťažký")
end.rcode-->

これは機能しますが、2行を同じチャンクに配置すると機能しません。これは、コードチャンクごとに、knitrプロットを記録するための新しいグラフィカルデバイスを開くためです(デフォルトではPDFデバイスです)。同じチャンクに入れpdf.options()たときにデバイスがデフォルトのエンコーディングで開かれているため、設定するには遅すぎます。pdf.options()plot()

作業ソリューションでは、PDFデバイスが2番目のチャンクに対して開くと、前のチャンクの設定からエンコーディングを継承します。それが文字を正しく生成する方法です。

各Rhtmlファイルでこのエンコードオプションを設定したくない場合は、~/.RprofileすべてのPDFデバイスに影響するように設定できます。または、Rhtmlファイルを編むための独自の関数を定義します。

knit2 = function(...) {
   pdf.options(encoding='ISOLatin2.enc')
   knitr::knit(...)
}

次にknit2('yourfile.Rhtml')

于 2012-11-09T16:56:20.150 に答える
3

例の@nograpes再現可能近似を使用する(MacOSXではR2.15.1):

pdf()
plot(1:2,main="šč")
dev.off()

OPのエラーコードを複製することができました。「šč」をラッピングしEncoding()て警告メッセージを削除しました。

pdf()
plot(1:2,main=Encoding("šč"))
dev.off()
于 2012-11-08T22:48:32.177 に答える