Crear vector con valores dados
En lugar de definir un vector y luego rellenar sus elementos, es posible crear un vector y especificar sus valores en una sola línea de código usando ::create(). Esta es una función miembro estática, es decir, es un método del propio tipo de vector, no de una variable de tipo vector. Puedes especificar hasta 20 elementos con create. (Para vectores más largos, tendrás que usar varias líneas de código.)
El siguiente código crea un vector numérico, important_numbers, que contiene pi, e e infinito.
NumericVector numbers = NumericVector::create(PI, exp(1), INFINITY);
::create también puede usarse para crear vectores con nombre. La sintaxis para nombrar elementos es _["name"] = value. Aquí tienes el mismo código de antes, esta vez nombrando los elementos.
NumericVector numbers = NumericVector::create(_["pi"] = PI, _["e"] = exp(1), _["inf"] = INFINITY);
Igual que en R, si quieres combinar variables de distintos tipos en otra variable, usas una lista. En la versión de Rcpp, el tipo va en mayúscula: es un List.
Este ejercicio forma parte del curso
Optimizar código de R con Rcpp
Instrucciones del ejercicio
- Completa la definición de una función,
create_vectors(), que cree algunos vectores.- Crea un vector de caracteres sin nombres,
polygons, con los valores"triangle","square"y"pentagon", en ese orden. - Crea un vector entero con nombre,
mersenne_primes, con los valores3,7y31, en ese orden. Los nombres deben ser"first","second"y"third". - Crea una lista con nombre,
both, que contengapolygonsymersenne_primes, en ese orden. Los nombres también deben serpolygonsymersenne_primes.
- Crea un vector de caracteres sin nombres,
Ejercicio interactivo práctico
Prueba este ejercicio y completa el código de muestra.
#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()
*/