指定した値でベクトルを作成する
ベクトルを先に定義してから後で要素を代入するのではなく、::create() を使うと、1 行のコードでベクトルを作成し、値を指定できます。これは「静的メンバー関数」で、ベクトルの変数に対するメソッドではなく、ベクトル型そのもののメソッドです。create では最大 20 要素まで指定できます(それ以上の長さのベクトルは複数行に分けて書く必要があります)。
次のコードは、円周率、e、無限大を含む数値ベクトル important_numbers を作成します。
NumericVector numbers = NumericVector::create(PI, exp(1), INFINITY);
::create は名前付きベクトルの作成にも使えます。要素に名前を付ける構文は _["name"] = value です。先ほどと同じコードを、今回は要素に名前を付けて示します。
NumericVector numbers = NumericVector::create(_["pi"] = PI, _["e"] = exp(1), _["inf"] = INFINITY);
R と同様に、異なる型の変数を 1 つの変数にまとめたい場合はリストを使います。Rcpp では型名は大文字で始まり、List を使います。
この演習はコースの一部です
Rcpp で R コードを最適化する
演習の手順
- いくつかのベクトルを作成する関数
create_vectors()の定義を完成させてください。- 名前なしの文字ベクトル
polygonsを、"triangle"、"square"、"pentagon"の順で含むように作成します。 - 名前付き整数ベクトル
mersenne_primesを、3、7、31の順で含むように作成します。各要素の名前は"first"、"second"、"third"とします。 - 名前付きリスト
bothを、polygonsとmersenne_primesをこの順で含むように作成します。リスト内の名前もそれぞれpolygonsとmersenne_primesとします。
- 名前なしの文字ベクトル
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
#include
using namespace Rcpp;
// [[Rcpp::export]]
List create_vectors() {
// Create an unnamed character vector
CharacterVector polygons = CharacterVector::___("___", "___", "___");
// Create a named integer vector
IntegerVector mersenne_primes = ___(_["___"] = ___, ___, ___);
// Create a named list
List both = ___(___, ___);
return both;
}
/*** R
create_vectors()
*/