---
title: 命令行浮云
date: '2010-11-02'
slug: floating-cloud-in-command-line
---

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

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

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

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


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

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