CommencerCommencer gratuitement

Créer un vecteur avec des valeurs données

Plutôt que de définir un vecteur puis de renseigner ses éléments ensuite, il est possible de créer un vecteur et de spécifier ses valeurs en une seule ligne de code avec ::create(). Il s’agit d’une fonction membre statique : c’est une méthode du type de vecteur lui‑même, et non d’une variable vecteur. Vous pouvez spécifier 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, contenant 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 souhaitez combiner des variables de types différents dans une autre variable, utilisez une liste. En Rcpp, le type est écrit avec une majuscule : c’est une List.

Cet exercice fait partie du cours

Optimiser du code R avec Rcpp

Afficher le cours

Instructions

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

Exercice interactif pratique

Essayez cet exercice en complétant cet exemple de code.

#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