IniziaInizia gratis

Crea un vettore con valori specifici

Invece di definire un vettore e riempirne gli elementi in un secondo momento, puoi creare un vettore e specificarne i valori in un’unica riga di codice usando ::create(). Si tratta di una funzione membro statica, cioè un metodo del tipo di vettore stesso, non di una variabile vettore. Con create puoi specificare fino a 20 elementi. (Per vettori più lunghi, devi usare più righe di codice.)

Il codice seguente crea un vettore numerico, important_numbers, che contiene pi greco, e ed infinito.

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

::create può essere usato anche per creare vettori con nomi. La sintassi per assegnare i nomi agli elementi è _["name"] = value. Ecco lo stesso codice di prima, questa volta con i nomi degli elementi.

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

Proprio come in R, se vuoi combinare variabili di tipi diversi in un’unica variabile, usi una lista. Nella versione Rcpp, il tipo è con l’iniziale maiuscola: è una List.

Questo esercizio fa parte del corso

Ottimizzare il codice R con Rcpp

Visualizza il corso

Istruzioni dell'esercizio

  • Completa la definizione di una funzione, create_vectors(), che crea alcuni vettori.
    • Crea un vettore di caratteri senza nomi, polygons, con i valori "triangle", "square" e "pentagon", in quest’ordine.
    • Crea un vettore intero con nomi, mersenne_primes, con i valori 3, 7 e 31, in quest’ordine. I nomi devono essere "first", "second" e "third".
    • Crea una lista con nomi, both, contenente polygons e mersenne_primes, in quest’ordine. I nomi devono essere polygons e mersenne_primes.

Esercizio pratico interattivo

Prova a risolvere questo esercizio completando il codice di esempio.

#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()
*/
Modifica ed esegui il codice