この問題has been reportedは、先にrmarkdownリポジトリに回答しました。ここで私はそれがうまくいかなかった技術的理由を説明しようとしています。私は上記の....
を使用してirrelvant情報を省略している
> neuralnet:::plot.nn
function (x, rep = NULL, x.entry = NULL, x.out = NULL, radius = 0.15,
....
{
....
if (is.null(rep)) {
for (i in 1:length(net$weights)) {
....
grDevices::dev.new()
plot.nn(net, rep = i,
....
}
}
:ソースコード(v1.33)から
Usage
## S3 method for class 'nn'
plot(x, rep = NULL, x.entry = NULL, x.out = NULL,
....
Arguments
...
rep repetition of the neural network. If rep="best", the repetition
with the smallest error will be plotted. If not stated all repetitions
will be plotted, each in a separate window.
:ヘルプページ?neuralnet::plot.nn
から
。基本的にrep
を指定しない場合、neuralnet:::plot.nn
は新しいグラフィックデバイスを描画します。これは、グラフィカルなデバイスを開いたが、(dev.control(displaylist = 'enable')
経由で)記録をオンにするためにそれらを要求しなかった
- ので、それは、knitrのグラフィック記録を中断します。
- knitrはデフォルトでグラフィックスを記録するために独自のデバイスを使用します。ユーザーが新しいデバイスを開いた場合、knitrで新しいプロットを保存できるという保証はありません。一般に、私は、プロット関数でグラフィカルデバイスを操作することをお勧めしません。例えば、私はneuralnetパッケージの作者ないんだけど、私は著者が
dev.new()
をドロップ示唆、あるいは少なくともそれを条件付きにしたい
if (interactive()) grDevices::dev.new()
私はdev.new()
コールの意図が新しいウィンドウでプロットを表示するには、おそらくだったが、ユーザーがウィンドウを見ることができる保証は本当にありませんね。 対話型の Rセッションのデフォルトのグラフィカルデバイスは、ウィンドウ/スクリーンデバイス(利用可能であればx11()
またはquartz()
など)ですが、デフォルトデバイスがユーザーまたはパッケージ作成者によって変更されている可能性があります。
非対話型のRセッションのために、それはおそらく(オフスクリーン、デフォルトで)を新たに開くためにあまり意味がありませんので、私は条件interactive()
を提案するデバイス。
'neuralnet :: plot(net)'を試して、何が起こるかを見てください。私は 'rbokeh'と' DT'で作業していて、チャンク内でも同様の問題を抱えていますが、別のウィンドウのスクリプトでは全く問題はありません。何とか基本機能が途中にあるように感じます。あなたに起こっていることではないかもしれませんが、それは私のために働き、試してみる価値があります。 – sconfluentus
最初は「neuralnet :: plot」という問題はないと思っていましたが、編み物とは対照的にチャンクを実行するとプロットが生成されることがわかりました。確かに奇妙です。 – neilfws
これは前に報告されています:https://github.com/rstudio/rmarkdown/issues/856 –