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
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 valori3,7e31, in quest’ordine. I nomi devono essere"first","second"e"third". - Crea una lista con nomi,
both, contenentepolygonsemersenne_primes, in quest’ordine. I nomi devono esserepolygonsemersenne_primes.
- Crea un vettore di caratteri senza nomi,
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()
*/