少し前にSweaveを使い始めました。しかし、ほとんどの人と同じように、私はすぐに大きな問題に遭遇しました。それは速度です。大きなドキュメントをスイーブすると、実行に時間がかかるため、効率的な作業が非常に困難になります。cacheSweaveを使用すると、データ処理を大幅に高速化できます。ただし、プロット(特にggplot;)-はレンダリングに時間がかかりすぎます。それが私がpgfSweaveを使いたい方法です。
何時間も経った後、私はついにEclipse / StatET/Texlipseで動作するシステムをセットアップすることに成功しました。次に、既存のレポートをpgfSweaveで使用するように変換したかったのですが、残念なことに、ほとんどのggplotが機能しなくなったようです。たとえば、次のプロットは、コンソールとSweaveで完全に機能します。
pl <- ggplot(plot_info,aes(elevation,area))
pl <- pl + geom_point(aes(colour=que_id))
print(pl)
pgfSweaveで実行すると、次のエラーが発生します。
Error in if (width > 0) { : missing value where TRUE/FALSE needed
In addition: Warning message:
In if (width > 0) { :
the condition has length > 1 and only the first element will be used
Error in driver$runcode(drobj, chunk, chunkopts) :
Error in if (width > 0) { : missing value where TRUE/FALSE needed
geom_pointからaes(...)を削除すると、プロットはpgfSweaveで完全に機能します。
pl <- ggplot(plot_info,aes(elevation,area))
pl <- pl + geom_point()
print(pl)
編集:私は問題をさらに調査し、問題をtikz-deviceに減らすことができました。
これは問題なく機能します。
quartz()
pl <- ggplot(plot_info,aes(elevation,area))
pl <- pl + geom_point(aes(colour=que_id))
print(pl)
これにより、上記のエラーが発生します。
tikz( 'myPlot.tex',standAlone = T )
pl <- ggplot(plot_info,aes(elevation,area))
pl <- pl + geom_point(aes(colour=que_id))
print(pl)
dev.off()
これも問題なく機能します。
tikz( 'myPlot.tex',standAlone = T )
pl <- ggplot(plot_info,aes(elevation,area))
pl <- pl + geom_point()
print(pl)
dev.off()
5つの異なるggplotでこれを繰り返すことができます。マッピングで色(またはサイズ、アルファなど)を使用しない場合は、tikzで機能します。
Q1:この振る舞いについて誰か説明がありますか?
さらに、非プロットコードチャンクのキャッシュはあまりうまく機能しません。次のコードチャンクは、Sweaveではまったく時間がかかりません。pgfSweaveでは、約10秒かかります。
<<plot.opts,echo=FALSE,results=hide,cache=TRUE>>=
#colour and plot options are globally set
pal1 <- brewer.pal(8,"Set1")
pal_seq <- brewer.pal(8,"YlOrRd")
pal_seq <- c("steelblue1","tomato2")
opt1 <- opts(panel.grid.major = theme_line(colour = "white"),panel.grid.minor = theme_line(colour = "white"))
sca_fill_cont_opt <- scale_fill_continuous(low="steelblue1", high="tomato2")
ory <- geom_hline(yintercept=0,alpha=0.4,linetype=2)
orx <- geom_vline(xintercept=0,alpha=0.4,linetype=2)
ts1 <- 2.3
ts2 <- 2.5
ts3 <- 2.8
ps1 <- 6
offset_x <- function(x,y) 0.15*x/pmax(abs(x),abs(y))
offset_y <- function(x,y) 0.05*y/pmax(abs(x),abs(y))
plot_size <- 50*50
一部の変数のみが後で使用するために設定されているため、これもかなり奇妙な動作のようです。
Q2:その説明はありますか?
Q3:より一般的には、pgfSweaveをうまく使用している人がいるかどうかを尋ねたいと思います。成功すると、Sweaveで機能するすべてのものがpgfSweaveでも機能し、優れたフォントと速度の向上という追加の利点があります。;)
ご回答ありがとうございます!