金魚亭日常

読書,ガジェット,競技プログラミング

RStudio の R Presentation (Windows の場合)

R Presentation ファイル(.Rproj)は knitr::knit()markdownに変換されてPreviewされる.

knitr::knit()

処理の流れは,

  1. 引数 encoding の判定・および変換
  2. readLines() で読み込み
  3. 拡張子の判定
  4. Chunk もしくは Inline code が含まれているかどうかの判定
  5. cat() もしくは writeLines() で出力

となる.

encoding の判定

プロジェクトの場合は,プロジェクトのエンコーディングknitr::knit() が呼び出された後,

に引数が変換される.

プロジェクトではない場合は,encoding = "UTF-8" で呼び出され,プロジェクトの場合と同じように引数が変換される.

readLines() で読み込み

  • 判定した encoding で読み込む
  • ここで cp932 のファイルを UTF-8 指定で読み込むと,読み込みに失敗して,結果的に変換に失敗したように見える
  • UTF-8 のファイルは,UTF-8 もしくは '' でしか読み込まれないので,読み込みに失敗することはない

拡張子の判定

拡張子 .Rpresall_patterns に含まれていない

Chunk もしくは Inline codeの判定

 ```{r}
 ```

もしくは

`r  `

が含まれていたら,writeLines(),含まれていなかったら cat() で出力される. writeLines()encoding が指定できるので,encoding = '' もしくは encoding = "UTF-8" で出力される.

cat() はファイル名をわたした場合 encoding 指定できないが, (出力する文字列の) Encoding()がunknown どうかで挙動が変わって,

  • UTF-8 のファイルを readLines(file("filename", encoding = "UTF-8")) を使って読み込んだ時は,Encoding()UTF-8になって,cat() すると cp932 で出力される
  • encoding = "" で読み込んだ場合は Encoding() が unknown で UTF-8 で出力される
  • (ちなみに,CP932 のファイルを CP932 指定で読むと Encoding()UTF-8 になって,cat() すると CP932 で出力される)
  • (指定しないで読み込むと CP932 で出力される)

cat() するのがよくないのと,cat()でファイル名をわたすのがよくない気がする. なので,.Rpresall_patterns に加える,もしくは,cat()file() をわたしてencodingを指定するのがよいと思うが,別のとこに影響出るんだろうか.

以下実験


プロジェクトではない場合

新規作成

デフォルトエンコーディング.Rproj ファイルが作成される

Preview

デフォルトエンコーディングに関係なく,

Chunk もしくは inline code なし

  • .RprojUTF-8
    • .md はcp932
    • Preview は文字化け
  • .Rproj が cp932
    • .md は変換に失敗,日本語が出現するところまでの部分が出力される.多分cp932.

Chunk もしくは inline code あり

  • .RprojUTF-8
    • .mdUTF-8
    • Preview は文字化けしない
  • .Rproj が cp932
    • .md は変換に失敗,日本語が出現するところまでの部分が出力される.多分cp932.

プロジェクトの場合

新規作成

プロジェクト設定のエンコーディング.Rproj ファイルが作成される

Preview

プロジェクト設定のエンコーディングUTF-8,Chunk もしくは inline code なし

  • .RprojUTF-8
    • .md はcp932
    • Preview は文字化け
  • .Rproj が cp932
    • .md は変換に失敗,日本語が出現するところまでの部分が出力される.多分cp932.

プロジェクト設定のエンコーディングUTF-8,Chunk もしくは inline code あり

  • .RprojUTF-8
    • .mdUTF-8
    • Preview は文字化けしない
  • .Rproj が cp932
    • .md は変換に失敗,日本語が出現するところまでの部分が出力される.多分cp932.

プロジェクト設定のエンコーディングが cp932,Chunk もしくは inline code なし

  • .RprojUTF-8
    • .mdUTF-8
    • Previewは文字化けなし
  • .Rproj が cp932
    • .md はcp932
    • Preview は文字化け

プロジェクト設定のエンコーディングが cp932,Chunk もしくは inline code あり

  • .RprojUTF-8
    • .mdUTF-8
    • Preview は文字化けしない
  • .Rproj が cp932
    • .md はcp932
    • Preview は文字化け