R + ggplot: отображение нескольких страниц

Я пытаюсь написать функцию, которая отображает график ggplot facet_wrap на нескольких страницах. Это просто взломать, поскольку эта функция, похоже, находится в списке функций ggplot2. Я делаю несколько небольших вычислений, чтобы найти количество страниц, которые мне понадобятся, количество строк моего data.frame, которое мне нужно на странице и т.д. Я уверен, что все это работает.

pdf(filename)
for (i in seq(num_pages)){
    slice = seq(((i-1)*num_rows)+1,(i*num_rows))
    slice = slice[!(slice > nrow(df.merged))]
    df.segment=df.merged[slice,]
    p <- ggplot(df.segment, aes(y=mean,x=phenotype))
    p <- p + geom_bar(stat="identity",fill="white",colour="black") 
    p + facet_wrap("ID",scales="free_y",ncol=n_facets,nrow=n_facets)
}
dev.off()

Моя проблема заключается в том, что, обертывая все это в цикле for, подобном этому, между функциями pdf() и dev.off(), заключается в том, что цикл for, похоже, не ждет, пока ggplot сделает свою работу, и прорывается через его цикл очень быстро и выводит недопустимый PDF.

Если я установил i = 1, запустите pdf(), запустите указанный выше код внутри цикла for, затем установите i=2, затем запустите код и так далее, пока мне не станет скучно (i=3), затем поверните выключение устройства, получившийся PDF файл является блестящим.

Есть ли способ, которым я могу заставить цикл for ждать окончания окончательной строки, прежде чем переходить на следующую итерацию?

Ответ 1

Я думаю, проблема в том, что вам нужна печать() вокруг вашей последней строки (p +...), чтобы заставить ее фактически распечатать на устройстве внутри цикла for.,

Ответ 2

Совершенно верно. Страница 39 из книги ggplot2 говорит нам, что при создании объектов ggplot2 вы можете "визуализировать ее на экране с помощью print(). Это происходит автоматически при запуске в интерактивном режиме, но внутри цикла или функции вам нужно будет напечатать() это самостоятельно".