在R中抑制C警告消息

Mic*_*ael 6 c gcc r libsvm

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

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

有任何想法吗?

谢谢!

Sim*_*nek 11

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

黑客stdio输出是可能的 - 你可以将输出重定向到你自己的管道并用它做你想做的事,但是a)它在C中有点工作,b)它很危险,因为你需要恢复标准行为之后你完成了这个功能 - 即使它出错了,c)如果在shell上使用,可能会与R输出交互.

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