7

これが本当のバグなのか、何かが欠けているのかはわかりませんが、これで終わりです。ループで呼び出したい ggplot 関数 (plot_data) があります。関数を独自のチャンクに含めました。関数の呼び出しは、ケース 1 (「動作」というタイトルのチャンク) のループで正常に動作します。この場合、plot_data 関数の後に棒グラフが続きます。ただし、2 番目のケースでは、plot_data() 関数の後にヒートマップが続きますが、奇妙なことに、ヒートマップは plot_data 関数を抑制します。これは、plot() または print() が plot_data 関数の周りで呼び出されたかどうかに関係なく発生します。

ggplotsをknitrで動作させる方法はありますか? そして、関数呼び出しが以前の関数呼び出しの出力を抑制するのはどうしてですか?

次のコードは、エラーを再現します。

[preamble omitted]
\begin{document}

<<setup, eval=TRUE, echo=FALSE, cache=FALSE>>=
plot_data <- function(data) {
    require(ggplot2)
    require(reshape)
    d.melt <- melt(data)
    ggplot(data=d.melt, aes(x=X2, y=value, group=X1, colour=X1)) + geom_line(size=.5) +
          scale_x_discrete("") +
          scale_y_continuous("Value")
    }
@

<<works, echo=FALSE, results='asis', out.width='.3\\linewidth', dev='pdf', cache=TRUE >>=
set.seed(10010)
data <- matrix(runif(10000, 1,100), ncol=100)
for (i in 1:10) {
    ind <- sample(1:100, 10)
    plot(plot_data(data[ind,]))
    barplot(ind)
}
@

<<doesnt-work, echo=FALSE, results='asis', out.width='.3\\linewidth', dev='pdf', cache=TRUE >>=
set.seed(10010)
data <- matrix(runif(10000, 1,100), ncol=100)
for (i in 1:10) {
    ind <- sample(1:100, 10)
    plot(plot_data(data[ind,]))  # calling print instead of plot doesn't work either
    heatmap(data[ind,]  )
}
@

\end{document}
4

2 に答える 2

3

私はあなたがから多くを求めていると思いますknitrknitrR では、ベース グラフィックスとグリッド グラフィックスの位置合わせは非常に簡単ではなく、やりがいがあります。 (パッケージ latex ) を使用してどうすればよいかわかりませんgraphicsが、 を呼び出すとheatmap、グリッドの同じ場所に印刷されると思います。プロット。

ベースグラフィックスを呼び出す前にa を追加するplot.newと、うまくいきます:

<<doesnt-work, fig.show='hold',out.width='.3\\linewidth'>>=
  set.seed(10010)
data <- matrix(runif(10000, 1,100), ncol=100)
for (i in 1:3) {
  ind <- sample(1:100, 10)
  print(plot_data(data[ind,]))  # calling print instead of plot doesn't work either
  plot.new()
  heatmap(data[ind,]  )
 }
@
于 2013-03-19T08:08:05.390 に答える