Asignación de vectores de arma de tamaño flexible: ¿verdad en general o es una propiedad de Rcpp?

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

  •  21-12-2019
  •  | 
  •  

Pregunta

Estoy usando el paquete Rcpp para escribir un código que tiene la proporción principal escrita en C++ y la proporción más pequeña en R.

Según lo que sé de C++, a diferencia de R, todas las variables en C++ deben declararse por adelantado y esta declaración incluye tanto el tipo como el tamaño.Por ejemplo cuando decimos:

arma::vec test(2);

entonces supongo que la prueba es un vector armadillo con tamaño 2, lo que significa que no debemos asignar nada de un tamaño diferente a la prueba.¿Está bien?

Aquí está mi desafío:

En mi código, tengo un bucle que asigna vectores de diferente tamaño (normalmente mayores que 2) al "vector de prueba". sin redeclaración de prueba.Para mi sorpresa, ¡el código funciona perfectamente sin ningún error de compilación!

En cada iteración, así es como asigno un nuevo vector para probar:

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

Pregunta:

¿Es esa una característica de Armadillo a la que podemos asignar vectores de diferentes longitudes para probar que inicialmente se declara de tamaño 2?¿O es una característica del paquete Rcpp?

Muchas gracias por su ayuda.

¿Fue útil?

Solución

Estás solicitando que el tamaño del vector se codifique en el tipo.Cuando especificas que algo es de tipo arma::vec, le permites aceptar arma::vecs de cualquier tamaño.

Si desea imponer una restricción de tamaño en el tipo, entonces desea algo como arma::vec::fixed<N>, donde en tu caso N Seria 2.Este es un tipo que impone la restricción de que los vectores deben ser de tamaño. N.También hay typedefs para versiones de dígitos bajos de estos, p. vec2 como un vector fijo de tamaño 2.

Tendrías que modificar tu as Creo que llama de manera similar; espero que funcione, no lo he probado.

Deberías leer el Documentos de armadillo;Los documentos de Armadillo son probablemente algunos de los más limpios y útiles que existen.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top