1. Learn
  2. /
  3. Courses
  4. /
  5. Optimizing R Code with Rcpp

Connected

Exercise

Klonování vektorů

Na rozdíl od R používá C++ systém kopírování odkazem – pokud zkopíruješ proměnnou a v kopii provedeš změny, tyto změny se projeví i v originálu.

// [[Rcpp::export]]
NumericVector always_returns_two(NumericVector x) {
  // Make a copy
  NumericVector y = x;
  // Modify the copy
  y[0] = 2;
  // The changes also happen in the original
  return x[0];
}

Aby ses tomuto chování vyhnul/a, musíš použít funkci clone(), která zkopíruje podkladová data z původní proměnné do nové. Syntaxe je y = clone(x). V tomto cvičení jsou pro tebe připraveny dvě funkce:

  • change_negatives_to_zero(): Vezme číselný vektor, upraví ho tak, že záporná čísla nahradí nulou, a vrátí původní vektor i kopii.
  • change_negatives_to_zero_with_cloning(): Dělá totéž, ale před úpravou původní vektor nejprve naklonuje.

Instructions

100 XP
  • Dokonči definici funkce change_negatives_to_zero() tak, že přiřadíš the_original do the_copy.
  • Dokonči definici funkce change_negatives_to_zero_with_cloning() tak, že nastavíš the_copy jako klon the_original.
  • Přečti si výstup v konzoli a porovnej výsledky obou funkcí.