используя R в jupyter: display_markdown в цикле

Мне нужно настроить отчетный документ, в котором я перебираю элементы и создаю отдельные графики. при использовании R в jupyter я читал о display_markdown и display_html с использованием repr и IRDisplay здесь: Как визуализировать LaTeX / HTML в Jupyter (R)? Это отлично справляется с задачей печати Markdown внутри ячейки кода. но, к сожалению, заказ испорчен.

If i do:

library(IRdisplay)
library(repr)
options(repr.vector.quote=FALSE)

for (i in 1:3) {
    print(paste("print before headline in run:",i))

    display_markdown(paste("# Headline in run:",i))

    cars <- c(i, 3, 6, 4, 9)
    plot(cars)   

    print(paste("print after headline in run:",i))
}

конечный результат в jupyter запутался. заголовки появляются над печатными линиями и графиками:

результат цикла приведенного выше кода

R версия 3.2.2 (2015-08-14)


person sektionschef    schedule 04.03.2016    source источник
comment
Разве это не просто сладкое, сладкое правосудие, вступающее в игру за использование неуправляемых, неприглядных блокнотов против упорядоченных документов R markdown? :-)   -  person hrbrmstr    schedule 04.03.2016
comment
Я человек с потребностями и желаниями. Rmarkdown работает в этом отношении, но сексуальные блокноты так заманчивы.   -  person sektionschef    schedule 04.03.2016
comment
Почему заголовки находятся перед печатью заголовка: irkernel использует оценку для выполнения кода, и из-за цикла for оценка выпускает стандартный вывод только тогда, когда он выходит за пределы цикла или включается при обработке графиков (или при вызове сообщения/предупреждения). См. этот PR: github.com/hadley/evaluate/pull/62. В настоящее время вы можете использовать сообщение вместо печати, чтобы изменить порядок текстовых элементов. Но это не объясняет порядок текста и графиков :-( Для этого я открыл github.com /IRkernel/IRkernel/issues/295   -  person Jan Katins    schedule 11.04.2016
comment
@JanSchulz - спасибо!   -  person sektionschef    schedule 12.04.2016


Ответы (1)


это работает, если я придерживаюсь функций отображения IRdisplay, определенных здесь: https://github.com/IRkernel/IRdisplay/blob/master/R/display.R во время цикла.

library(IRdisplay)
library(repr)

for (i in 1:3) {
    display(paste("print before headline in run:",i))

    display_markdown(paste("# Headline in run:",i))

    cars <- c(i, 3, 6, 4, 9)

    png(paste("plots_",i,".png", sep=""),width=1480, height=1240, res=120)
       plot(cars, main=as.character(i))
    dev.off()

    display_png(file=paste("plots_",i,".png", sep=""))      

    display(paste("print after headline in run:",i))
}
person sektionschef    schedule 04.03.2016