始める無料で始める

指定した値でベクトルを作成する

ベクトルを先に定義してから後で要素を代入するのではなく、::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 を、3731 の順で含むように作成します。各要素の名前は "first""second""third" とします。
    • 名前付きリスト both を、polygonsmersenne_primes をこの順で含むように作成します。リスト内の名前もそれぞれ polygonsmersenne_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()
*/
コードを編集して実行