我正在从与 libsvm(C 程序)接口的 R 包 e1071 中调用 R 函数。此函数将 C (printf) 警告消息传递到 R 控制台。我知道这一点是因为警告消息的形式是(警告:...),而 R 警告消息是大写的(即警告:...)。
我已经尝试了一切来摆脱 R 中的这些消息(接收器、suppressWarnings、不可见),但似乎没有任何效果。
有任何想法吗?
谢谢!
该函数使用stdio而不是Rprintf
/REprintf
或者warning
这就是 R 输出的重定向不起作用的原因。正确的解决方案是修复调用libsvm
以使用 R 输出。
破解stdio输出是可能的 - 您可以将输出重定向到您自己的管道并使用它做您想做的事情,但是 a)它在 C 中有点工作,b)它很危险,因为您需要在之后恢复标准行为你已经完成了这个函数——即使它出错了,如果在 shell 上使用,c) in 可能会与 R 输出交互。
如果您想要一个非常古怪、肮脏但快速的解决方案,请在collect(parallel(..., silent=TRUE))[[1]]
from中运行您的函数multicore
- 它会抑制stdoutmulticore:::closeStderr()
(如果您也想抑制stderr ,您可以添加)。