Rcppで定義するC++の関数に関数を渡すときはRcpp::FuncでOK
この辺
の例では1引数しか渡さないケースばかりだったので、複数引数の関数を渡せることに気がつかなかった。以下では適当な関数(someFunc)と、Rから関数を引数に取って処理を行う関数callFuncを定義している。
library(Rcpp) sourceCpp(code=' #include <Rcpp.h> using namespace Rcpp; // [[Rcpp::export]] NumericVector someFunc(NumericVector x, double t, CharacterVector c) { return (x+t); } // [[Rcpp::export]] NumericVector callFunc(NumericVector x, double t, CharacterVector c, Rcpp::Function func) { return func(x, t, c); } ')
実際に使ってみると・・・
> f <- function(x, t, s){x+t} > callFunc(1:10, 1, "A", f) [1] 2 3 4 5 6 7 8 9 10 11 > callFunc(1:10, 1, "A", someFunc) [1] 2 3 4 5 6 7 8 9 10 11
となる。第三引数のCharacterVectorは、ちゃんと渡せるかを確認したかったただのおまけ。