大きなデータセットをプロットする方法を尋ねるのではなく、たくさんのプロットを生成するコードが壊れないようにplot
をラップしたい大きなオブジェクトをプロットする。 plot
を非常に簡単な方法で包んでその機能をすべて保持するにはどうすればよいですか?最初に渡されるオブジェクトが大きすぎるかどうかをテストしますか?大きなデータセットをプロットするのを防ぐために、Rのプロット関数(またはggplot2)をラップする
このコードは、plot
への非常にバニラの呼び出しでは機能しますが、plot
(下記参照)と同じ一般性がありません。
myPlot <- function(x, ...){
isBad <- any((length(x) > 10^6) || (object.size(x) > 8*10^6) || (nrow(x) > 10^6))
if(is.na(isBad)){isBad = FALSE}
if(isBad){
stop("No plots for you!")
}
return(plot(x, ...))
}
x = rnorm(1000)
x = rnorm(10^6 + 1)
myPlot(x)
これが失敗する例:
x = rnorm(1000)
y = rnorm(1000)
plot(y ~ x)
myPlot(y ~ x)
は、まだすべての引数を通過する際に、プロットするデータの、このチェックを有効にするplot
をラップするためにいくつかの簡単な方法はありますか?そうでなければ、ggplot2
はどうですか?私は平等な機会で、プロッタではない。 (データセットが大きい場合には、私はhexbin、サブサンプリング、密度プロットなどを使用しますが、それはここでの焦点ではありません)
注1:アイデアをテストする場合、私はテストすることをお勧めします> 1Mのサイズではなく、size> 100の場合(または変数を設定します(例:myThreshold <- 1000
)、それ以外の場合は低速プロットに苦労します。 :)
+1正しい答えを投稿してください。 – Andrie
+1何が起きているのか、そして標準的で非標準的な参照への非常に有用なポインタのための洞察。 'plot.formula'のコードをどこで見つけることができますか?私は、式からオブジェクトを抽出するコードはすべて動作すると思うので、それも探しています。 – Iterator
@Iterator 'graphics ::: plot.formula'または' getAnywhere(plot.formula) 'がコードを表示します。 'methods(plot)'は、プロットジェネリックで利用可能なS3メソッドを示します。 'plot.formula'は' methods() 'の出力に' * 'で示されています。これは、関数自体が名前空間からエクスポートされていないことを示しています。代わりにS3のディスパッチ方法として登録されています。 –