R:如何在C++中抑制来自Rprintf的suppressMessages?

7
我正在编写一个带有一些运行时间长的计算的R包,其中包含C++代码。在C++代码中,我使用Rprintf()输出信息。我尝试使用suppressMessages()来抑制R中的输出,但这并不起作用,消息仍会出现在R会话中。
我发现了一些类似的问题,人们在使用printf时遇到了类似情况,但我已经在使用Rprintf了。我还尝试过R_ShowMessage(),但它也会立即显示且无法被suppressMessages()抑制。
以下是一些示例C ++代码:
#include <R.h>
extern "C" {
void R_testprint()
{
    Rprintf("Try to suppress me!\n");
    R_ShowMessage("Try to suppress me, too!");
}
}

调用此代码的函数:

test.print <- function(string) {
    res <- .C("R_testprint")
}

现在,以下的R代码不会抑制输出:
> suppressMessages( test.print() )
Try to suppress me!
Try to suppress me, too!

我使用的是 R 版本 3.1.0

非常感谢任何帮助!


你能给我们展示一下C++代码吗? - Irrational Person
1个回答

1
使用`capture.output`代替`suppressMessages`:
 b <- capture.output( test.print() )

然后输出结果将被存储在字符向量b中,而不是被打印出来。

我想使用suppressMessages,因为这是任何使用此代码的用户都会做的事情。该代码是R包的一部分,因此任何用户都会使用suppressMessages来抑制输出。 - chakalakka
如果输出需要是数据框而不是字符向量,怎么办? - jsta

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接