7

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

我已经尝试了一切来摆脱 R 中的这些消息(接收器、suppressWarnings、不可见),但似乎没有任何效果。

有任何想法吗?

谢谢!

4

1 回答 1

11

该函数使用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 ,您可以添加)。

于 2012-01-12T21:48:53.287 回答