此問題has been reported並在rmarkdown存儲庫中回答。在這裏,我只是試圖解釋爲什麼它不起作用的技術原因。
從幫助頁面?neuralnet::plot.nn
:
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.
從源代碼(v1.33中):
> 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,
....
}
}
予省略如上所述使用....
的irrelvant信息。基本上如果你沒有指定rep
,neuralnet:::plot.nn
會打開新的圖形設備繪製陰謀。這將打破knitr的圖形記錄,因爲
- 它打開圖形設備,但沒有要求他們打開記錄(通過
dev.control(displaylist = 'enable')
);
- knitr默認使用自己的設備記錄圖形;如果用戶打開新設備,則不能保證可以通過knitr節省新的地塊。一般來說,我不打算在繪圖功能中操縱圖形設備。
我不是neuralnet包的作者,但我建議作者降dev.new()
,或者至少使其有條件的,例如
if (interactive()) grDevices::dev.new()
我猜dev.new()
調用的意圖很可能顯示在新窗口中地塊,但實在是沒有保證用戶可以看到窗口。 R會話的默認圖形設備是窗口/屏幕設備(如果可用,例如x11()
或quartz()
),但用戶或程序包作者更改默認設備的可能性很大。
我建議條件interactive()
,因爲對於非交互式R會話,打開新的(默認情況下,off-screen)設備可能沒有多大意義。
試試''netnet :: plot(net)'看看會發生什麼。我一直在使用'rbokeh'和'DT',並且在塊內有類似的問題,但在另一個窗口的腳本中完全沒有問題。它感覺就像某種方式的基本功能是如此。這可能不是你正在發生的事情,但它爲我工作,值得一試。 – sconfluentus
最初我認爲問題是沒有'neuralnet :: plot',但我看到運行大塊而不是編織會產生一個陰謀。奇怪的確如此。 – neilfws
此前已有報道:https://github.com/rstudio/rmarkdown/issues/856 –