Rcpp で R コードを最適化する
Romain François
Consulting Datactive, ThinkR
Rprintf() を使ってコンソールにメッセージを出力する関数
cppFunction( '
int fun(){
// Some values
int x = 42 ;
// Printing a message to the R console
Rprintf( "some message in the console, x=%d\\n", x ) ;
// Return some int
return 76 ;
}
')
%d を使った整数プレースホルダー
int x = 42 ;
Rprintf( "some message in the console, x=%d\n", x ) ;
// Prints the following in the console:
some message in the console, x=42
%s を使った文字列プレースホルダー
Rprintf( "roses are %s, violets are %s\n", "red", "blue" ) ;
// Prints the following:
roses are red, violets are blue
Rprintf() を使ってコンソールにメッセージを出力する関数
cppFunction( 'int fun(){
// some values
int x = 42 ;
// printing a message to the R console
Rprintf( "some message in the console, x=%d\\n", x ) ;
// return some int
return 76 ;} ')
関数の呼び出し
fun()
some message in the console, x=42
76
0 から 20 の数値のみを受け取る関数
cppFunction( 'int fun(int x){
// A simple error message
if( x < 0 ) stop( "sorry x should be positive" ) ;
// A formatted error message
if( x > 20 ) stop( "x is too big (x=%d)", x ) ;
// Return some int
return x ; }')
fun(-2)
Error in fun(-2) : sorry x should be positive
fun(23)
Error in fun(23) : x is too big (x=23)
tryCatch( fun(24), error = function(e){
message("C++ exception caught: ", conditionMessage(e))
})
C++ exception caught: x is too big (x=24)
Rcpp で R コードを最適化する