これは、@baptiste が 2014 年に回避しようとしていた問題に似ているようです。6 月に書いた、3 つの ggplotGrob を作成し、それらを cbind の呼び出しと組み合わせることを含むコードを再検討しています。現在、このコードは次のメッセージで失敗します。
これは私の特定のアプリケーションに固有のものだと思いましたが、非常に単純で再現可能な例を作成することができました。cbind が 2 つの同一の ggplotGrob で実行された場合でも、このコードは失敗します。
library(ggplot2)
library(gtable)
# Make some plots
pl1 <- ggplot(mtcars, aes(x = disp, y = mpg)) +
geom_point()
pl2 <- ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width, colour = Species)) +
geom_point()
# Convert to grobs
pl1_grob <- ggplotGrob(pl1)
pl2_grob <- ggplotGrob(pl2)
# Bind them together -- Error!
combined_grob <- cbind(pl1_grob, pl2_grob)
エラーと関連するトレースバックは次のとおりです。
> combined_grob <- cbind(pl1_grob, pl2_grob)
Error in mmm < each : comparison of these types is not implemented
> traceback()
8: comp(x_val, y_val)
7: unit(comp(x_val, y_val), x_unit)
6: compare_unit(x$heights, y$heights, pmax)
5: cbind_gtable(x, y, size = size)
4: f(init, x[[i]])
3: Reduce(function(x, y) cbind_gtable(x, y, size = size), gtables)
2: cbind(deparse.level, ...)
1: cbind(pl1_grob, pl2_grob)
このコードは、OS X 10.11.6 で grid_3.4.2、gtable_0.2.0、および ggplot2_2.2.1 の R-3.4.2 で失敗し、Linux で R-3.3.2 (Ubuntu 16.04 のソースからコンパイル) で grid_3.3.2 で失敗します。 、gtable_0.2.0、および ggplot2_2.2.1。
上記の例を作成する前に、「lemon」パッケージ (「gtable_show_lemonade」) のビネットの 1 つが、2 つの gtable の cbind で同じエラーで最後近くで失敗することに気付きました。ソースからこのビネットのコードを実行して、このエラーを確認しました。次のようになります。
library(lemon)
edit(vignette('gtable_show_lemonade', package = 'lemon'))
# Then use whichever editor you opened to copy the temporary filename
# of the vignette source, and run this with source()
コンパイルされたビネット (cbind が失敗したもの) はこちら: https://cran.r-project.org/web/packages/lemon/vignettes/gtable_show_lemonade.html
ビネット コンパイル中の障害は、OS X 10.11 (El Capitan) で実行されている前述の R-3.4.2 インスタンスを使用して取得されました。
これを回避するための助けをいただければ幸いです。Mac を使用して図を生成したいので (より良いフォントの状況)、これを修正する関数をオーバーロードできる方法があることを願っています。
アップデート:
size = 'max'
これは、デフォルトである が指定されている (または)場合に「のみ」問題になりますsize = 'min'
。size = 'first'
問題のある高さの比較を実行しないorを使用して回避できると思いますsize = 'last'
が、デフォルトの動作が機能しないことは確かに不便です (特定の状況size = 'max'
では便利です)。