1. Învăţa
  2. /
  3. Courses
  4. /
  5. Rcpp で R コードを最適化する

Connected

exercise

ベクトルのクローン

R と異なり、C++ は参照によるコピーの仕組みを使います。つまり、変数をコピーしてそのコピーに変更を加えると、元の変数にも同じ変更が反映されます。

// [[Rcpp::export]]
NumericVector always_returns_two(NumericVector x) {
  // コピーを作成
  NumericVector y = x;
  // コピーを変更
  y[0] = 2;
  // 変更は元のオブジェクトにも起こる
  return x[0];
}

この振る舞いを防ぐには、clone() 関数を使って、元の変数の基になるデータを新しい変数にコピーする必要があります。構文は y = clone(x) です。 この演習では、次の2つの関数を用意しています。

  • change_negatives_to_zero():数値ベクトルを受け取り、負の数をゼロに置き換えるように変更し、元のベクトルとコピーの両方を返します。
  • change_negatives_to_zero_with_cloning():上と同じ処理を行いますが、変更する前に元のベクトルをクローンします。

Instrucţiuni

100 XP
  • change_negatives_to_zero() の定義を完成させ、the_original を the_copy に設定してください。
  • change_negatives_to_zero_with_cloning() の定義を完成させ、the_copy を the_original のクローンに設定してください。
  • コンソールの出力を読んで、各関数の結果を比較してください。