在调试Rcpp时等待用户输入

时间:2017-12-12 17:50:19

标签: r debugging rstudio rcpp

调试Rcpp时,我经常发现自己不得不使用老式的Rprintf语句来观察变量和程序流程(根据this answer上@RomainFrancois的评论)。但是,对于大循环这样的情况,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函数来调试它们?

1 个答案:

答案 0 :(得分: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()