631 字

命令行浮云

我来说个高级一点的“浮云”:很久以来我都很不满Sweave的错误处理机制,甚至都有改写Sweave源代码的念头,这件事情本应该很容易解决,但R core们估计太忙了——每段代码加上try()然后要是出错就打印错误信息,不要让Sweave直接在某段代码上挂掉。最近R 2.12.0在这个问题上改进了一小步,如果代码段解析出错,那么会打印错误出现的行号,但还是没解决根本问题,后面据说还要改进。这是引子。

Sweave出错就让R挂掉这种方式对于用LyX来说非常不方便,每当出错,都很难查错,因为没有任何错误日志;要检查错误,还得打开R,在交互模式下运行Sweave(),看到底哪里错了。这也是很久以来我觉得头疼的问题。这学期做579课的TA,上周两节课讲LyX和Sweave,因为我一直鼓吹LyX的种种好处,二老板估计也好奇,于是就把课交给我来上。这LyX+Sweave好用是好用,就是配置过程太琐碎,上课花了不少时间在这个配置上,于是课下花了很大功夫写了个自动配置脚本,尽量让用户不必管任何细节问题,一切都用命令行搞定。然而还是没有错误信息的解决办法,学生们的文档运行出错我通过Email也很难知道错在哪里,很多时候只能凭经验。

今天应开(这是个人名)同学也问起这个问题,我回复了我的查错办法之后他回了他的办法:调用R的时候,将命令行输出重定向到文件就可以了,也就是这种形式:

R -e Sweave('your-Sweave-file.Rnw') >> your-log-file.log

原来答案这么简单,我怎么没想到呢。

小月月那点浮云算啥浮云呐,这才真的叫“神马都是浮云”。