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
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 valeurs3,7et31. Les noms doivent être"first","second"et"third". - Créez une liste nommée,
both, contenant, dans cet ordre,polygonsetmersenne_primes. Les noms doivent aussi êtrepolygonsetmersenne_primes.
- Créez un vecteur de caractères non nommé,
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()
*/