2016-03-04 97 views
2

我需要设置一个报告文档,其中I 在项目上循环并生成单个图形。当使用R在jupyter我阅读关于display_markdown和display_html在这里使用repr和IRDisplay:How to render LaTeX/HTML in Jupyter (R)?这完美地完成了在代码单元格内打印Markdown的工作。但不幸的是订单被毁掉了。在jupyter中使用R:display_markdown在循环中

如果我这样做:

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最终的结果得到混合。的头条新闻出现在打印线和上述曲线图,:

loop result of above code

ř版本3.2.2(2015年8月14日)

+1

难道这不就是一个甜蜜的,甜蜜的正义为使用难以管理的恶作剧的笔记本电脑vs有序的R markdown文档而发挥作用吗? :-) – hrbrmstr

+1

我是一个有需求和欲望的人。 Rmarkdown在这方面的作品,但性感的笔记本电脑是如此诱人。 – sektionschef

+0

Re为什么标题在“标题之前”打印前面:irkernel使用评估来执行代码,并且由于for循环只在“循环”之外或处理绘图时(或在调用消息时)评估“发布”标准输出/警告)。看到这个PR:https://github.com/hadley/evaluate/pull/62。目前,您可以使用消息而不是打印强制文本元素的顺序。但这并不能解释文本和图表的顺序:-(为此我打开https://github.com/IRkernel/IRkernel/issues/295 –

回答

2

它的工作原理,如果我坚持这里定义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)) 
}