Nie jestem pewien, czy jest to prawdziwy błąd, czy czegoś brakuje, ale tutaj jest. Mam funkcję ggplot (plot_data), którą chciałbym wywołać w pętli. Uwzględniłem funkcję we własnej części. Wywołanie funkcji działa dobrze w pętli na wypadek, gdyby jeden (fragment zatytułowany "działa"), w tym przypadku po funkcji działka_podpisywana jest plamka. Jednak w drugim przypadku po funkcji plot_data() następuje mapa termiczna, ale mapa ciepła, w sposób dziwny, blokuje funkcję plot_data. Zdarza się to niezależnie od tego, czy funkcja plot() lub print() jest wywoływana wokół funkcji działka_danych.knitr: wywołanie funkcji ggplot2 w pętli nie jest drukowane, gdy towarzyszą jej niektóre inne funkcje drukowania
Czy istnieje sposób, aby ggplots zachowywać się z dzianin? A jak w piekle jest wywołanie funkcji tłumiące wyjście poprzedniego wywołania funkcji?
Następujący kod powtarza błąd dla mnie:
[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}
To jest długie ujęcie, ale jest 'par (" ask ")' TRUE? –
Co z '<>' w obrębie każdego fragmentu (nie to, że zmienia problem)? dlaczego nie ustawić 'eval = TRUE' w' setup' i nie zawracać sobie głowy wywołaniem go po tym? –
mnel
sebastian-c: no par ("ask") zwraca wartość false. – zzk