Séquence d'entiers
Les fonctions que vous avez écrites dans les exercices précédents effectuaient des calculs puis retournaient un seul nombre. Vous pouvez aussi écrire des fonctions qui retournent un vecteur.
La syntaxe pour créer un type vecteur consiste à indiquer le type du vecteur, suivi du nom de la variable, puis du nombre d'éléments du vecteur entre parenthèses. Par exemple, pour créer un vecteur numérique nommé numbers contenant 10 éléments, le code serait le suivant.
NumericVector numbers(10);
Cette activité fait partie du cours
Optimiser le code R avec Rcpp
Instructions de l’exercice
- Complétez la définition d'une fonction
seq_cpp()qui prend deux entiersloethiet retourne unIntegerVectordes nombres entre ces deux valeurs.- Définissez le type de retour à
IntegerVector. - Créez un nouveau vecteur d'entiers
sequencede taillen. - Dans la boucle
for, affectez à l'élément i desequencela valeurloplusi. - Retournez
sequence.
- Définissez le type de retour à
Exercice interactif pratique
Essayez cet exercice en complétant ce code d’exemple.
#include
using namespace Rcpp;
// Set the return type to IntegerVector
// [[Rcpp::export]]
___ seq_cpp(int lo, int hi) {
int n = hi - lo + 1;
// Create a new integer vector, sequence, of size n
___;
for(int i = 0; i < n; i++) {
// Set the ith element of sequence to lo plus i
___;
}
return ___;
}
/*** R
lo <- -2
hi <- 5
seq_cpp(lo, hi)
# Does it give the same answer as R's seq() function?
all.equal(seq_cpp(lo, hi), seq(lo, hi))
*/