我从R包e1071调用R函数,它与libsvm(一个C程序)连接。此函数将C(printf)警告消息传递给R控制台。我知道这是因为警告消息的形式(警告:......)而R警告消息是大写的(即警告:......)。
我已经尝试了一切来摆脱R中的这些消息(下沉,抑制警告,看不见),但似乎没有任何效果。
有什么想法吗?
谢谢!
答案 0 :(得分:11)
该函数使用 stdio 而不是Rprintf
/ REprintf
或warning
,这就是为什么R输出的重定向不起作用的原因。正确的解决方案是修复libsvm
中的调用以改为使用R输出。
攻击 stdio 输出是可能的 - 您可以将输出重定向到您自己的管道并使用它执行您想要的操作,但是a)它在C中有点工作,b)它是危险,因为您需要在完成该功能后恢复标准行为 - 即使它出错并且c)可能与R输出交互(如果在shell上使用)。
如果您想要一个非常糟糕,又脏又快的解决方案,请在collect(parallel(..., silent=TRUE))[[1]]
multicore
中运行您的功能 - 它会抑制 stdout (您可以添加multicore:::closeStderr()
如果你想抑制 stderr 。