Assegnazione vettoriale di Arma di dimensioni flessibili - Vero in generale o è una proprietà di RCPP?

StackOverflow https://stackoverflow.com//questions/23044537

  •  21-12-2019
  •  | 
  •  

Domanda

Sto usando il pacchetto RCPP per scrivere un codice che ha la proporzione principale scritta in C ++ e la proporzione più piccola in R.

Sulla base di ciò che conosco da C ++, tutto a differenza di R, tutte le variabili in C ++ devono essere dichiarate in anticipo e questa dichiarazione include sia il tipo che la dimensione. Ad esempio quando diciamo:

arma::vec test(2);
.

Allora presumerei il test è un vettore di armadillo con dimensioni 2 che significa che non dovremmo assegnare nulla di una dimensione diversa da testare. È giusto?

Ecco la mia sfida:

Nel mio codice, ho un ciclo che assegna vettori di dimensioni diverse (di solito più grande di 2) al "vettore del test" senza Redeclaration del test. Con mia sorpresa, il codice funziona perfettamente bene senza alcun errore di compilazione!

In ogni iterazione, ecco come assegnando un nuovo vettore da testare:

test = Rcpp::as<arma::vec>(myList["aVecFromMyList"]);
.

Domanda :

È che una caratteristica di Armadillo che possiamo assegnare vettori di lunghezze diverse da testare che inizialmente è dichiarata di dimensioni 2? oppure è una funzione di pacchetto RCPP?

Grazie mille per il tuo aiuto.

È stato utile?

Soluzione

Stai chiedendo che le dimensioni del vettore siano codificate nel tipo .Quando si specifica che qualcosa è di tipo arma::vec, si consentisce di accettare arma::vecs di qualsiasi dimensione.

Se si desidera applicare un vincolo di dimensioni nel tipo, quindi si desidera che qualcosa come arma::vec::fixed<N>, dove nel tuo caso N sarebbe 2. Questo è un tipo che impone il vincolo che i vettori dovrebbero essere di dimensioni generali generatori.Ci sono anche typedefs per versioni a basse cifre di questi, ad es.N come un vettore fisso di dimensioni 2.

Dovresti modificare la chiamata vec2 Allo stesso modo, credo - spero che funzioni, non l'ho testato.

Dovresti leggere il Armadillo Docs ;I documenti dell'armadillo sono probabilmente alcuni dei più puliti e più utili là fuori.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top