【问题标题】:Making Rcout output appear on the R console immediately使 Rcout 输出立即出现在 R 控制台上
【发布时间】:2012-11-10 23:58:09
【问题描述】:

我使用Rcpp(特别是RcppArmadillo)编写了一个MCMC 采样器。我希望我的采样器将定期状态消息打印到 R 控制台,但是当采样器终止时,这些消息会立即出现。输出语句为:

Rcout << "Progress => " 
      << double(iterations) / double(maxit) * 100 
      << "%" 
      << std::endl;

能否扩充这段代码,使其输出立即出现在 R 控制台上?

R 版本:2.14.1

平台:达尔文 9.8.0

Rcpp 版本:0.9.10

【问题讨论】:

  • 您可能需要刷新控制台输出缓冲区。在 c++ 中是 std::flush,也许有一个 Rcpp 等价物?
  • 也许调用R_FlushConsole 就可以了

标签: r flush rcpp


【解决方案1】:

根据answers to this question 的建议,此行为已在Rcpp 0.10.0(即将发布)中实现。

同时,您可以手动拨打R_FlushConsole

【讨论】:

  • 当我在那里的时候。我实现了Rcerr
  • std::flush 和 R_FlushConsole 都不能解决问题。输出仍然延迟,直到函数终止。
  • 感谢您的报告。你如何运行 R ?在 OSX 的控制台上?使用标准 R 应用程序?
  • 我使用标准应用程序(R GUI 版本 1.43)。
  • 在 R-devel 的代码中,我可以阅读:This should have been fixed a long time ago .... Finally in Sep 2012 R.app sets ptr_R_FlushConsole。也许这适用于 R-devel。
【解决方案2】:

flush() 和 flush.console() 仍然损坏。 R 3.0.2 / OSX

【讨论】:

    【解决方案3】:

    你需要一个帽子戏法:

    R_FlushConsole();
    R_ProcessEvents();
    R_CheckUserInterrupt();
    

    复制自:parallel-computing-in-r-with-c-within-r-functions

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多