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