调试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函数来调试它们?
答案 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()