2017-12-12 18 views
1

Rcppをデバッグするとき、私は通常、古いプログラムのRprintfステートメントを使用して、変数とプログラムフローを監視する必要があります(this answerの@RomainFrancoisからのコメントに従って)。しかし、大きなループのような状況では、Rprintfからの出力が非常に速すぎるとコンソールの上部で素早く消えることがあります。キーを押すまで実行を一時停止することができます。デバッグ中にユーザー入力を待つRcpp

std::cin.get()コールをC++スクリプトで使用して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

OK、私は回避策を見つけました。これは、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() 
関連する問題