在R中抑制C警告消息

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

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

有任何想法吗?

谢谢!

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

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

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