Я не уверен, что это настоящая ошибка, или я что-то упускаю, но здесь это происходит. У меня есть функция ggplot (plot_data), которую я бы хотел вызвать в цикле. Я включил функцию в свой кусок. Вызов функции отлично работает в цикле в случае одного (кусок под названием «работает»), в этом случае за функцией plot_data следует панель. Однако во втором случае функция plot_data() сопровождается тепловой маской, и в этом случае тепловая карта, как ни странно, подавляет функцию plot_data. Это происходит независимо от того, вызывается ли функция plot() или print() вокруг функции plot_data.knitr: вызов функции ggplot2 в цикле не отображается, когда сопровождается некоторыми другими функциями построения графика.
Есть ли способ заставить 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}
Это длинный снимок, но это 'par (" ask ")' TRUE? –
Внутри каждого фрагмента хранится '<>' (а не что это проблема)? почему бы не установить 'eval = TRUE' в' setup' и не называть его после этого? –
mnel
sebastian-c: no par ("ask") оценивается как false. – zzk