2013-04-10 8 views
7

私はknitr 1.1を使用しています。 R 3.0.0およびWinEdt(RWinEdt 2.0)内にあります。私はスウェーデン人のキャラクター(ä、ö、å)を認識するknitrに問題があります。これはRの問題ではありません。それらの文字は、ファイル名、ディレクトリ名、オブジェクトなどでも認識されます。Sweaveでは、それは問題ではありませんでした。ニットの非英語の特殊文字

私の文書にはすでに\usepackage[utf8]{inputenc}がありますが、knitrは特殊文字を処理できないようです。 knitrを実行した後、次のメッセージが表示されます。

Warning in remind_sweave(if (in.file) input) : 
It seems you are using the Sweave-specific syntax; you may need Sweave2knitr("deskriptiv 130409.Rnw") to convert it to knitr 

processing file: deskriptiv 130409.Rnw 

(*) NOTE: I saw chunk options "label=läser_in_data" 
please go to http://yihui.name/knitr/options (it is likely that you forgot to 
quote "character" options) 

Error in parse(text = str_c("alist(", quote_label(params), ")"), srcfile = NULL) : 
1:15: unexpected input 
1: alist(label=lä 
       ^
Calls: knit ... parse_params -> withCallingHandlers -> eval -> parse 
Execution halted 

ラベルには、ラベル=läserという文章があります。ラベルを変更するだけでは十分ではありません。なぜなら、Rオブジェクトがäåöを使用すると、knitrは文句を言うからです。

Sweave2knitr()はSweave用に作成されたファイルなので使用しましたが、結果は良くありませんでした。現在、すべてのファイルはRチャンクとラテックステキストの両方に変換されています。 knitrはまだエラーメッセージを表示します。

セッション情報:

R version 3.0.0 (2013-04-03) 
Platform: i386-w64-mingw32/i386 (32-bit) 

locale: 
[1] LC_COLLATE=Swedish_Sweden.1252 LC_CTYPE=Swedish_Sweden.1252   LC_MONETARY=Swedish_Sweden.1252 
[4] LC_NUMERIC=C     LC_TIME=Swedish_Sweden.1252  
attached base packages: 
[1] stats  graphics grDevices utils  datasets methods base  
other attached packages: 
[1] knitr_1.1 
loaded via a namespace (and not attached): 
[1] digest_0.6.3 evaluate_0.4.3 formatR_0.7 stringr_0.6.2 tools_3.0.0 

私はそこに(その前に問題になっていないため)スウェーデンの文字を含むファイル名やオブジェクトがあり、また、テキストはスウェーデン語であることが必要で述べたように。

knitrが英語以外で働くのを助けてくれてどうもありがとう。

答えて

3

このモードを使用してknitrを呼び出す場合は、WinEdtのR-Sweave modeのメンテナーに連絡してください。あなたのOSのネイティブエンコーディングを使用していない場合、WinEdtはファイルのエンコーディングをknit()に渡さなければならないという問題があります。 UTF-8と記載されていますが、これはWindowsのネイティブエンコーディングではないため、ファイルがUTF8エンコードされていることが確かでない限り、\usepackage[utf8]{inputenc}を使用しないでください。

ここにはいくつかの問題が混在しており、すべてを1つの回答で解決する可能性は低いです。

最初の問題はlabel=läserです。本当にlabel='läser'である必要があります。すなわち、must quoteすべてのチャンクラベルです(ドキュメント内の他のラベルも確認してください)。 knitrは、<<foo>>=(それは<<'foo'>>=になります)を書くときにラベルを自動的に引用しようとしますが、<<label=foo>>=を使用すると正しく動作しません(<<label='foo'>>=を明示的に記述する必要があります)。しかし、この問題はここでは必須ではないかもしれません。

ここでの本当の問題はファイルエンコード(Windowsでは厄介です)だと思います。デフォルトでUTF-8を尊重しないシステムでは、UTF-8を使用しているようです。この場合、knit('yourfile.Rnw', encoding = 'UTF-8')に電話をかけてください。つまり、エンコードをknit()に渡してください。私はWinEdtを使わないので、どうやってそれをするのか分かりません。 hard-code the encoding in the configurationsでも構いませんが、これはお勧めできません。

つの提案:

  1. は、Windowsの下でUTF-8を使用しないでください。代わりにあなたのシステムのネイティブエンコーディング(Windows-1252、私が推測する)を使用してください。
  2. 、またはWinStoreではなくRStudioを使用してください。これは、knitrにエンコードを渡すことができます。

Sweave2knitr()がポップアップしていたため、Rnwドキュメントに他の問題があるはずです。問題を診断、行くには2つの方法がありますするには、次の

  1. あなたがUTF-8を使用している場合、あなたはOSのネイティブエンコーディングを使用する場合Sweave2knitr('deskriptiv 130409.Rnw', encoding = 'UTF-8')
  2. を実行し、ちょうどSweave2knitr('deskriptiv 130409.Rnw')

を実行してお読みくださいSweave2knitr()によって印刷された診断情報についてご質問がある場合はdocumentationとなります。

+0

ありがとうございました。少なくとも今は私のファイルでknitr()を実行することができますが、特殊文字はまだ問題です。私はSweaveの部品をknitr()に準拠するように修正しました。ラテックステキストは、(この順序で)
'\ usepackage [utf8] {inputenc}' '\ usepackage [T1] {fontenc}'を指定することによって正しく実行されます。 – user2266041

+1

@ user2266041あなたがUTF-8を使用していると確信しているなら、Gilbertの答えが働くはずです。 –

2

R-Sweaveは、knitrSweave.Rのコードを使用してニットを起動するknitr.edtマクロによってknitrを呼び出します。この後のスクリプトでknitコマンドが先頭にあり、res <- knit(filename)と表示されます。

Yihuiの提案に続いて、knitr.edtknitrSweave.Rファイルが%bがあなたのwinEdtのユーザーフォルダ(勝利7の下"C:\Users\userA\AppData\Roaming\WinEdt Team\WinEdt 7"のようなもの)であるあなたの%b\Contrib\R-Sweaveフォルダにする必要があります

res <- knit(filename, encoding = 'UTF-8') 

で、このコマンドを置き換えるために試すことができます。

現在のところ、このハードコーディングの解決策を避けるために、エンコーディングを引数として渡す方法がわかりません。

ファイル名に拡張文字が含まれないようにすることをお勧めします。ファイル名は問題の原因となります。個人的に、私はそのような名前を使用しません。

+0

ギルバート:あなたの答えをありがとう。あなたが言及したテキストを追加しましたが、R塊に特殊文字を受け入れるknitrにはまだ問題があります。 äåöを含むファイル名とRオブジェクトは、単に読み込まれません。 – user2266041