R markdown多语言混用生成分析报告

Jean

R markdown目前支持数十种编程语言,所以是个适用范围很广的强大专业编著工具。 这里面还没有java,不过<a href="https://baike.baidu.com/item/Scala/2462287?fr=aladdin" target="_blank" class="link"><i class="iconfont icon-iconfontlink"> </i>scala</a>是由java派生的,也是运行在JVM上。<div>R markdown对其它语言的支持都是通过定义语言引擎处理代码块来实现的,<a href="https://github.com/yihui/knitr-examples" target="_blank" class="link"><i class="iconfont icon-iconfontlink"> </i>这里</a>有各种语言代码块的示例。如果有需要,也可以在<a href="https://cran.r-project.org/web/packages/knitr/index.html" target="_blank" class="link"><i class="iconfont icon-iconfontlink"> </i>knitr</a>中自定义自己的语言引擎,无论是支持新的语言还是替换原有的语言引擎,具体可以参阅<a href="https://bookdown.org/yihui/rmarkdown-cookbook/custom-engine.html" target="_blank" class="link"><i class="iconfont icon-iconfontlink"> </i>该文档</a>。<br>需要了解的是,knitr并不直接运行其它语言的代码,只是把代码块当成字符串传递给相应的语言,比如Python解析器,然后合并返回的结果到输出文档中。代码块的选项,比如message=TRUE等,则是告知knitr怎样处理代码块源码与返回的结果。所以这些代码块一般运行在独立的会话进程中。<br></div> 其中只有R、Python、Julia三种语言的会话是连续的,即前面代码块中定义的变量,后面的代码块中可以引用。reticulate包让R与Python中的变量与函数可以互相引用,它会自动作变量类型转换,具体可参阅<a href="https://rstudio.github.io/reticulate/" target="_blank" class="link"><i class="iconfont icon-iconfontlink"> </i>该文档</a>。R markdown中的SQL代码块依赖于DBI包,支持DBI API的数据库,如Oracle,SQLite可以在SQL代码块中直接执行SQL语句,并且执行结果可以返回成R data frame,相当于R、Python、SQL在R markdown是连通的。<br>其它的语言,可以在R或Python中分别调用,它们的会话是独立的,即前面代码块中定义的变量,后面的代码块中不能引用。但可以通过把结果赋值给R或Python变量,通过它们把各种语言不同的代码块连接起来,从而达到看起来像是在同一个会话中的效果。<br><div>本篇以航空乘客数据airpassengers为例,从各个数据源加载数据,然后插入SQLite内存数据库中,再执行SQL语句分析。<br>实际操作中连接数据源后,可以直接执行SQL语句操作数据。因为有多个数据源,这里用SQLite做演示。</div><div><br><b>大数据计算可在云端等强算力环境上完成,Rstudio Server、Shiny Server、R markdown等适合处理预处理好的中间或结果小数据集,作深度的分析和可视化。这是个不错的组合,它们也的确可以连接和增强不同的后端,让孙悟空乘上飞快的筋斗云。R与Python等有数万个各种各样的工具包,提供了各种各样强大的处理能力,连接着世界上庞大而充满活力的开源社区,这是一笔宝贵而丰富的IT资产,正是各个云平台所缺乏的,二者是相辅相成的互补关系,人们应该充分利用。</b></div><div><b>海纳百川,有容乃大。上善若水,万物并育而不相害,生态系统因此而得以平衡和良性循环。</b><br></div><div><b><br></b></div><div>下面各图是本例Rmd源码渲染执行的结果,源码在书中再列。</div><div>1、加载用到的包。用showtext处理ggplot2绘图中文标签的显示。</div> 2、从各种数据源加载数据,这里展示了R与Python的合用。R可以连接几乎所有现有的数据源。 3、阿里云有提供R接口包,直接用R语言,华为云用的是Python。需要连接其它云等后端的,至少会有Python接口包可用。Oracle有提供R接口包,很多历史数据还是在Oracle数据库里。 这里顺便展示R与Python会话中变量的交叉引用。 4、为演示直接执行SQL,把各种数据源收集的数据,注入内存的SQLite数据库中。 5、在R markdown脚本中交互式执行SQL语句,嵌入结果。 6、在Python中绘图。 7、嵌入基于JavaScript的HTML Widget,提供浏览器端的即时交互,有很多各种各样的HTML Widget,具体可以参阅<a href="https://www.htmlwidgets.org/index.html" target="_blank" class="link"><i class="iconfont icon-iconfontlink"> </i>该文档</a>。 8、交互式的Shiny文档,提供服务器端的即时交互。 9、嵌入JavaScript脚本与CSS脚本改善报告的可视化效果。 10、直接嵌入HTML脚本。 11、部分源码。 SQL代码块的选项是有意义的,执行结果里没有显示出来。并且SQL语句执行的结果,在Rstudio里编辑Rmd源码时,是可翻页的交互式表格,与渲染结果只显示一页是不同的。