QuartoでRを呼び出すときの注意点(Windows OS)

Quartoでrmarkdownを使うにはRのスタートアップ設定が重要
R
Quarto
公開

2022年12月25日

RStudioがRmarkdownの発展としてQuartoをサポートしていると聞いて、さっそく試してみました。

Quartoのチュートリアルに従って、まずはrmdからhtmlに変換してみます。 筆者はRStudioを使っていないので、コマンドラインで実行。なおOSはWindows11です。

quarto render testq.qmd --to html

しかしエラー発生…

 loadNamespace(name) �ŃG���[: there is no package called 'jsonlite'
 �Ăяo��:  .main ... tryCatch -> tryCatchList -> tryCatchOne -> <Anonymous>
 ���s����~����܂���

R installation:
  Version: 3.5.0
  Path: C:/PROGRA~1/R/R-35~1.0
  LibPaths:
    - C:/Program Files/R/R-3.5.0/library
  rmarkdown: (None)

The rmarkdown package is not available in this R installation.
Install with install.packages("rmarkdown")

環境変数QUARTO_R

最初のエラーは文字化けしててよく分かりませんが、jsonliteパッケージが見つからないと言っているようです。 しかしその前に、参照しているRのバージョンが3.5になってしまっているのが困ります。 3.5は自作パッケージの動作確認用に入れているだけのもので、普段は使っていません。

公式ドキュメントを見ると、Rのバージョンの指定は環境変数QUARTO_Rで行えるとあります。 しかしQUARTO_Rに4.2とかを指定しても特に変化がない…

Github issuesなどを見て分かったことは、QUARTO_Rには使いたいR本体の(たぶんどちらかと言えばRscriptの)ディレクトリパスを指定する仕様になっているということです。 それは分からないよ。設定例とかを載せておいてほしいですね。1

ということで環境変数QUARTO_Rを設定。

set QUARTO_R=C:\Program Files\R\R-4.2.2\bin

これはコマンドプロンプトで設定した例ですが、一応Rのコマンドで設定すると次のようになります。 最初からRStudioを使っていたらこの問題は起こらないかも知れないので、必要ないかも知れませんが…

Sys.setenv(QUARTO_R=r"(C:\Program Files\R\R-4.2.2\bin)")

ライブラリパスの設定

さて、Rのバージョン問題は解決したのでパッケージが見つからない問題に移りましょう。

Error in loadNamespace(x) : there is no package called 'jsonlite'
Calls: .main ... loadNamespace -> withRestarts -> withOneRestart -> doWithOneRestart
Execution halted

R installation:
  Version: 4.2.2
  Path: C:/PROGRA~1/R/R-42~1.2
  LibPaths:
    - C:/Program Files/R/R-4.2.2/library
  rmarkdown: (None)

The rmarkdown package is not available in this R installation.
Install with install.packages("rmarkdown")

R4.2を使うようにしたら文字化けが解消されましたが、Rの多言語対応が進んでいるということでしょうか。ありがたいことです。

エラーを見るとどうやらRにプリインストールされているライブラリパスしか見に行っていない様子。 これは、Windowsで言うスタートメニューからRを起動したときのライブラリパスの状態になるようです。 先ほどの設定でProgram FilesにあるRのディレクトリを指定したから当然と言えば当然か…

普通の人ならスタートメニューからの起動で.Rprofileなどが読み込まれていつものRの環境になると思いますが、 筆者はデフォルトのホームディレクトリ(ユーザの「ドキュメント」フォルダ)が気に入らなくて別の場所にしており、 かつそれを環境変数R_USERなどを使わずに実現しているため、スタートメニューからの起動ではライブラリパスを認識してもらえなかったということのようです。

それならいつもの.Rprofileを読み込んでもらえるようにすればよいので、 今後のことは後で考えるとして、とりあえずカレントディレクトリを.Rprofileがあるフォルダに移して実行します。

> Output created: testq.html

無事に動きました!

ここまでがチュートリアル…長かった…

脚注

  1. 使いたいR本体のディレクトリパスを環境変数PATHに追加するという解決法を取っている方もいました。Quartoは最初にPATHを見に行くと書かれているので確かにそれでも動きそうです。↩︎