Macos Rcpp:Mac显示加载轮,几乎冻结

Macos Rcpp:Mac显示加载轮,几乎冻结,macos,r,terminal,rcpp,Macos,R,Terminal,Rcpp,我创建了一个依赖于Rcpp的R包。 这个包中的函数应该在每n次迭代时显示打印语句。 所以我希望每隔几秒钟就能在R控制台上看到一条新的线路 奇怪的是,当我在R GUI中运行我的函数时,光标变成一个加载轮,R“几乎”冻结。计算完成后,加载轮消失一次 这种情况的最小示例总结如下: library(inline) library(Rcpp) test <- cxxfunction( signature(), body= ' RNGScope scope; for (int i = 0; i &l

我创建了一个依赖于Rcpp的R包。 这个包中的函数应该在每n次迭代时显示打印语句。 所以我希望每隔几秒钟就能在R控制台上看到一条新的线路

奇怪的是,当我在R GUI中运行我的函数时,光标变成一个加载轮,R“几乎”冻结。计算完成后,加载轮消失一次

这种情况的最小示例总结如下:

library(inline)
library(Rcpp)
test <- cxxfunction(
signature(),
body= '

RNGScope scope;
for (int i = 0; i < 100; i++)
{
sleep(1); // sleep one second at each iteration. this sleep is
// replaced by something in my code
if (i%20==0) Rprintf("\v%d iterations are done...",i);
}

return wrap(1);
' ,
plugin="Rcpp"
               )

test()// freeze for 100 seconds!
库(内联)
图书馆(Rcpp)

测试Rgui缓冲输出。我不使用Rgui,但尝试查找控制输出是否缓冲的设置。对于R代码,可以使用<代码> FLUSE.控制台< /C>强制输出,但我不完全知道这将如何与C++代码一起工作。

< P>问题是关于Mac上的R.App,而不是Windows上的RGUI。下面的解决方案适合我:使用R_FlushConsole和R_ProcessEvents遵循Rprintf,如下所示:

RNGScope范围;
对于(int i=0;i<100;i++){
sleep(1);//在每次迭代中睡眠一秒钟。这种睡眠是
//替换为我代码中的某个内容
如果(i%20==0){
Rprintf(“\v%d次迭代已完成…\n”,i);
R_冲洗控制台();
R_ProcessEvents();
}
返回包装(1);
+1——这几乎与Rcpp无关,只与Windows上的Rgui有关,在Windows上,如果内存可用,您可以使用配置切换来取消缓冲设置。