Chapter 27 Rのコード中にRcppのコードを埋め込む
Rcppのコードをファイルに保存せずに、Rのコードの中で記述することもできます。そのためには sourceCpp()
cppFunction()
evalCpp()
を使う。
###sourceCpp()
sourceCpp() に対しては、Rcpp コードを記述したファイルへのパスを与える代わりに、RcppのコードをRの文字列として記述して与えることもできます。
src<-
"#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
double rcpp_sum(NumericVector v){
double sum = 0;
for(int i=0; i<v.length(); ++i){
sum += v[i];
}
return(sum);
}"
sourceCpp(code = src)
rcpp_sum(1:10)
###cppFunction()
cppFunction()
を使うと「単一のRcpp関数」を手軽に作成することができます。その際には #include<Rcpp.h>
とusing namespase Rcpp
の記述を省略できます。
src <-
"double rcpp_sum(NumericVector v){
double sum = 0;
for(int i=0; i<v.length(); ++i){
sum += v[i];
}
return(sum);
}
"
Rcpp::cppFunction(src)
rcpp_sum(1:10)
###evalCpp()
evalCpp()
を使うと手軽にRcppの式を評価することができます。
##C++のソースにRのコードを埋め込む
C++ のコード内に R のコードを記述することもできます。
C++ コード内で /*** R
で始まるコメントの内に R のコードを書くと、sourceCpp()
した時に、それが実行されます。・