Chapter 20 Rの関数を利用する

Rcpp 内で R の関数を利用するには、FunctionEnvironment を用います。

20.1 Function を用いた方法

Function クラスを使うと、Rcpp 内から R の関数を呼び出すことができます。R の関数に与えた値がどの引数に渡されるかは、位置と名前に基づいて判断されます。

名前を指定して引数に値を渡すには Named() 関数または _[] を使用します。Name() は、Named("引数名", 値)Named("引数名") = 値 の2つの方法で用いることができます。

下のコード例では、Rcpp で定義した関数の中で R の関数 rnorm(n, mean, sd) を呼び出す例を示します。なお、この方法でパッケージの関数を呼び出す場合は、あらかじめ R で library 関数などを用いてパッケージの環境をサーチパスに追加しておく必要があります。

実行例

上の例では、Rcpp で呼び出される R の関数の返値の型は NumericVector である前提になっています。しかし、下の例のように Rcpp 関数内で呼び出される R の関数の返値の型が決まっていない場合もよくあります。そのような場合には、どんな型でも代入できる RObjectList に関数の返値を代入するようにすると良いでしょう。

下のコード例では、R の lapply() を単純化した関数を Rcpp で定義する例を示します。

20.2 Environment を用いた方法

Environment クラスを利用するとパッケージ等の環境からオブジェクト(変数や関数)を取り出すことができます。

下のコード例では、パッケージ Matrix にある関数 Matrix() を呼び出す例を示します。なお、この方法でパッケージの関数を呼び出す場合には、library 関数を用いてパッケージの環境をサーチパスに追加する必要はありません。

実行結果

> m <- matrix(c(1,0,0,2), nrow = 2, ncol = 2)
> rcpp_package_function(m)
2 x 2 sparse Matrix of class "dsCMatrix"
        
[1,] 1 .
[2,] . 2