在R中抑制C警告消息

时间:2012-01-12 21:28:14

标签: c r gcc libsvm

我从R包e1071调用R函数,它与libsvm(一个C程序)连接。此函数将C(printf)警告消息传递给R控制台。我知道这是因为警告消息的形式(警告:......)而R警告消息是大写的(即警告:......)。

我已经尝试了一切来摆脱R中的这些消息(下沉,抑制警告,看不见),但似乎没有任何效果。

有什么想法吗?

谢谢!

1 个答案:

答案 0 :(得分:11)

该函数使用 stdio 而不是Rprintf / REprintfwarning,这就是为什么R输出的重定向不起作用的原因。正确的解决方案是修复libsvm中的调用以改为使用R输出。

攻击 stdio 输出是可能的 - 您可以将输出重定向到您自己的管道并使用它执行您想要的操作,但是a)它在C中有点工作,b)它是危险,因为您需要在完成该功能后恢复标准行为 - 即使它出错并且c)可能与R输出交互(如果在shell上使用)。

如果您想要一个非常糟糕,又脏又快的解决方案,请在collect(parallel(..., silent=TRUE))[[1]] multicore中运行您的功能 - 它会抑制 stdout (您可以添加multicore:::closeStderr()如果你想抑制 stderr