【问题标题】:wait for user input while debugging Rcpp [duplicate]在调试 Rcpp 时等待用户输入 [重复]
【发布时间】:2018-05-26 11:52:54
【问题描述】:

在调试 Rcpp 时,我通常发现自己不得不使用老式的 Rprintf 语句来观察变量和程序流(根据 @RomainFrancois 在 this answer 上的评论)。但是,对于大型循环等情况,Rprintf 的过多快速输出可能会在控制台顶部迅速消失,我希望能够暂停执行,直到我按下一个键。

如果我尝试在 c++ 脚本中使用 std::cin.get() 调用并从 Rstudio 运行它,控制台就会卡住,无法将按键直接指向等待它们的 c++ 调用。注意这是一个 RSudio 特定的问题 - 从终端窗口运行相同的代码时不会发生这种情况,它按预期工作。

一个简单的可重现示例:

library(Rcpp)

cppFunction('
void test() {
  for (int i = 0; i < 100; i++) {
    Rprintf(\"i = %i\\n\", i);
    std::cin.get();
  }
}
')

test()

我怎样才能让它工作,以便我可以交互式地逐步通过 Rcpp 函数来调试它们?

【问题讨论】:

    标签: r debugging rstudio rcpp


    【解决方案1】:

    好的,我想出了一个解决方法——使用 R 函数 (readline) 来读取用户输入,而不是使用 c++ 函数。我仍然想知道 RStudio 是否有办法将输入传递给 c++ 函数。

    cppFunction('
    void test(){
      Environment base = Environment("package:base");
      Function readline = base["readline"];
      for (int i = 0; i < 10; i++) {
        Rprintf(\"i = %i\", i);
        readline("");
      }
    }
    ')
    
    test()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-20
      • 1970-01-01
      • 1970-01-01
      • 2015-11-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多