pkgdown ウェブサイトで RGL を使う

Duncan Murdoch

何が問題なのか?

pkgdown は、パッケージの Web サイトを簡単に構築するための R パッケージです。 しかし、CRAN にある現在のバージョン 1.6.1 は、例題に RGL を使用しているパッケージや、 leaflet のように htmlwidgets を使用しているパッケージに対しては、あまりうまく動作しません。 htmlwidgets のようなパッケージではうまく動作しません。 このドキュメントでは、これら両方のサポートに関する現在の進捗状況を説明します。

pkgdown をサポートする上での主な問題点は、 RGL やその他の htmlwidgets のユーザは、各 Web ページに複数の Javascript ライブラリをリンクする必要があります。 pkgdown 1.6.1 ではこれができませんが、Github にある現在の開発版では、追加の依存ライブラリのサポートが追加されています。 これには、downlit の変更や、他のウィジェットについては htmlwidgets の変更 も必要です。

変更点のインストール

変更点のインストールはとても簡単です。 remotes パッケージがインストールされていることを確認し、以下を実行してください。

remotes::install_github(c("r-lib/downlit",
                          "r-lib/pkgdown",
                          "dmurdoch/rgl",
                          "dmurdoch/htmlwidgets@rglpatch"))

これらの開発版パッケージがインストールされていると、サンプルの中に RGL や leaflet の出力が自動的に現れるようになります。 RGL の出力は、knitr ドキュメントでの

setupKnitr(autoprint = TRUE)

つまり、出力されたRGLコマンドが自動的に表示に含まれるようになります。 低レベルの変更は1つの表示にまとめられます。:

# Show regression plane with z as dependent variable
library(rgl)
open3d()
## null 
##    4
x <- rnorm(100)
y <- rnorm(100)
z <- 0.2*x - 0.3*y + rnorm(100, sd = 0.3)
fit <- lm(z ~ x + y)

plot3d(x, y, z, type = "s", col = "red", size = 1)

# No plot here, because of the planes3d() call below

coefs <- coef(fit)
a <- coefs["x"]
b <- coefs["y"]
c <- -1
d <- coefs["(Intercept)"]
planes3d(a, b, c, d, alpha = 0.5)

図形の大きさの指定

デフォルトでは、pkgdown は幅が高さよりも大きい標準的なプロットを生成します(黄金比に従っています)。 RGL のプロットは、ユーザーがコンテンツを回転させる可能性があるため、幅と高さが等しい方が見栄えが良い場合が多いです。

pkgdown でプロットのサイズを指定するには、_pkgdown.ymlfigures 項目を使用します。 デフォルトでは以下のようになっています。:

figures:
  dev: ragg::agg_png
  dpi: 96
  dev.args: []
  fig.ext: png
  fig.width: 7
  fig.height: ~
  fig.retina: 2
  fig.asp: 1.618
  bg: NA
  other.parameters: []

デフォルトでは RGL はこれらのパラメータを使用しますが、other.parametersrgl エントリを指定することで、fig.width, fig.height, fig.asp のいずれかをオーバーライドすることができます。 例えば、以下のようになります。:

figures:
  fig.width: 5
  other.parameters:
    rgl:
      fig.asp: 1

これにより、すべてのプロットの幅が5インチになり、RGLのプロットが正方形になります。

これは安全に使うことができますか?

これらは開発版のパッケージなので、私の変更点や他の未発表の変更点などのバグが含まれている可能性があります。 通常のプロダクションコードに使用することはお勧めしません。 リリースされたバージョンのパッケージを再インストールするには、以下を実行してください。

install.packages(c("downlit", "pkgdown", "htmlwidgets", "rgl"))

使ってみて、もしバグに気づいたら、ぜひ バグを報告 してください。