星期三, 五月 23, 2012

被knitr包给震撼到了

在食神这部电影中,薛家燕以极为夸张的方式表现了黯然销魂饭有多么好吃。各位可脑补一下这个场景,然后将赞叹的对象换成knitr包。knitr包是谢益辉创建的一个用于生成动态报告的R语言扩展包,和它相类似的功能在之前是由Sweave来完成的。关于Sweave的用处,谢大牛曾经在统计之都写过一个专门的文章。并由此引出了“可重复性研究”(Reproducible Research)这个概念。

可重复性研究本质上是要求研究过程的开源和透明。所有的数据分析过程,从数据获取、转换处理到分析,最后生成报告,均由一份代码文件描述完成。这样的做法不仅使用户本身能从重复性工作中抽身出来,也能使其它人分享你的研究过程,并从中获益。knitr包就是能让用户在这一份文档中同时写Latex代码和R代码,并使之完美结合。在knitr官网上,也详细提供了这个扩展包的由来、特点以及各种示范帮助。

使用knitr生成报告并不难,象我的话,使用环境是windows7+CTeX套装+RStudio+R+knitr。先在RStudio的Sweave选项中设置用knitr来解释Rnw文档。然后新建一个Rnw文件,可同时编写LaTex和R代码。Rnw文档中的R代码由Chunk来标记注明。点击compile PDF就可以生成最终的报告。报告中对R代码会自动进行语法高亮,R运行的结果也自然附上。当然你可以在Chunk中进行设置,隐藏代码或是运行结果。

只要有一定R语言基础和LaTex的基础,knitr很容易掌握,笔者研究了大半天就捣鼓出来一个还过得去的PDF(用散点图示范ggplot2的核心概念)。各位若感兴趣,可以到这里下载这个PDF文件,以了解knitr的效果。原始代码在此

从R-blogger网站上看,knitr包广受关注和好评,而且在即将开始的第五届R语言会议中,统计之都的魏太云也将向各位介绍knitr包的特点。敬请期待吧!

06.15补充:研究了一下markdown标记语言,的确可以在五分钟内掌握,并生成不错的web文档,当然最好可以有一点网页的基础。这里是和上面那个PDF内容相同的一个示例

19 条评论:

  1. 哈哈,黯然销魂饭的比喻太夸张了。

    话说统计之都上的文章我也该更新了。

    回复删除
    回复
    1. 能够成功的折腾出中文我也觉得很神奇,经过多次撞墙我得到的一个“偏方”就是:在文档开头部分要搞简单点,否则就会出错,标题摘要部分全部出不来。还是linux简单。

      我觉得knitr要出一本类似ggplot2的书,将所有参数设置和应用完整的啰嗦一遍啊。但是我更期待你的R之忍者秘笈。你的文债好多啊。

      删除
    2. 书的事情正在跟Chapman & Hall谈。

      文债的确太多了……

      删除
  2. 我安装了knitr包和Rstudio但是在option里面没有pdf的ITEM,也就是再markdown点运行那没有knit pdf,只有knit html,请问怎么弄出来呢?

    回复删除
    回复
    1. 你建的是Rmd文件吧,要新建Sweave文件,后缀是Rnw,才会有compile PDF。你再试试看,应该是这样。

      删除
  3. 求教诗人:我用RStudio建一个markdown文件,当我点击knit preview时,中文部分不显示,只有英文部分显示。请问应该怎么设置?若是我open你的ggplot2.Rnw,就可以生产有中文的pdf文件。我的软件和你上面列的一样except我的系统是winxp。

    回复删除
  4. 诗人,还要追加一个问题:我下载了ggplot2.Rnw,当我compile时,有的字符有乱码,比如“<”,显示成一个倒置的!请问怎么更正?

    回复删除
    回复
    1. 用markdown的Rmd格式应该问题少些,你可以尝试一下在这个页面输入你的代码:http://public.opencpu.org/apps/knitr/ 如果是Rnw格式生成PDF的话建议是用linux系统就不会有问题。我在win下面也遇到过中文不显示或乱码问题的,木办法啊。如果非要在win底下弄,我建议是在文档开头部分要搞简单点。

      删除
    2. 谢谢诗人。我从谢大师的knitr theme中copy了设置theme的code, paste到你的ggplot2.Rnw 中,不知什么原因,乱码消失了。而且也能highlight了。markdown 是好学,但是不如Rnw的漂亮。

      删除
  5. 请问诗人, 怎么讲html文件编译成pdf?谢谢

    回复删除
    回复
    1. 如果是用knitr包,直接新建一个 R Sweave文件,保存后将是Rnw后缀的文档。这时就可以点击编译为pdf了。

      删除
    2. 这样的话只能用latex写?如果用ma的话只能生成html?

      删除
    3. 你说的没错,是这样的。不过我想应该有工具可以将html转为pdf吧,你可以试试pandoc行不行。

      删除
    4. 好的 谢谢诗人

      删除
  6. 你好,Rstudio,用的是R2.15.2,不支持Pdfsweave?

    回复删除
  7. 被中文的问题折腾死了,请问怎么解决的

    回复删除
    回复
    1. 据说最新版的rstudio+knitr可以,但最好还是用linux

      删除
  8. 求教:俺安装了Latex在俺的mac air,并且可以用TeXworks, 和TeXshops生成pdf文档,可是在Rstudio里新建Rnw文件时却提示我No TeX installation detected. Please install TeX before compiling...
    如之奈何??

    谢谢诗人

    回复删除
    回复
    1. mac木试过,不过估计你机器上有不同版本的latex,不是rstudio的问题。

      删除