CommencezCommencez gratuitement

Créer un vecteur avec des valeurs données

Plutôt que de définir un vecteur puis de remplir ses éléments après coup, il est possible de créer un vecteur et de préciser ses valeurs sur une seule ligne de code avec ::create(). Il s'agit d'une fonction membre statique, c'est‑à‑dire une méthode du type de vecteur lui‑même, et non d'une variable vecteur. Vous pouvez indiquer jusqu'à 20 éléments avec create. (Pour des vecteurs plus longs, vous devrez utiliser plusieurs lignes de code.)

Le code suivant crée un vecteur numérique, important_numbers, qui contient pi, e et l'infini.

NumericVector numbers = NumericVector::create(PI, exp(1), INFINITY);

::create peut aussi servir à créer des vecteurs nommés. La syntaxe pour nommer les éléments est _["name"] = value. Voici le même code, cette fois avec des noms d'éléments.

NumericVector numbers = NumericVector::create(_["pi"] = PI, _["e"] = exp(1), _["inf"] = INFINITY);

Comme en R, si vous voulez combiner des variables de types différents dans une autre variable, vous utilisez une liste. Dans Rcpp, le type prend une majuscule : c'est une List.

Cette activité fait partie du cours

Optimiser le code R avec Rcpp

Voir le cours

Instructions de l’exercice

  • Complétez la définition d'une fonction create_vectors() qui crée quelques vecteurs.
    • Créez un vecteur de caractères non nommé, polygons, contenant, dans cet ordre, les valeurs "triangle", "square" et "pentagon".
    • Créez un vecteur entier nommé, mersenne_primes, contenant, dans cet ordre, les valeurs 3, 7 et 31. Les noms doivent être "first", "second" et "third".
    • Créez une liste nommée, both, contenant, dans cet ordre, polygons et mersenne_primes. Les noms doivent aussi être polygons et mersenne_primes.

Exercice interactif pratique

Essayez cet exercice en complétant ce code d’exemple.

#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()
*/
Modifier et exécuter le code