Maak een vector met gegeven waarden
In plaats van eerst een vector te definiëren en daarna de elementen te vullen, kun je met ::create() in één regel een vector maken én de waarden opgeven. Dit is een statische lidfunctie: een methode van het vectortype zelf, niet van een specifieke vectorvariabele. Met create kun je tot 20 elementen opgeven. (Voor langere vectors moet je meerdere regels code gebruiken.)
De volgende code maakt een numerieke vector, important_numbers, met pi, e en oneindig.
NumericVector numbers = NumericVector::create(PI, exp(1), INFINITY);
::create kan ook worden gebruikt om benoemde vectors te maken. De syntaxis om elementen te benoemen is _["name"] = value. Hier is dezelfde code nog eens, nu met namen voor de elementen.
NumericVector numbers = NumericVector::create(_["pi"] = PI, _["e"] = exp(1), _["inf"] = INFINITY);
Net als in R gebruik je een lijst als je variabelen van verschillende typen wilt combineren. In de Rcpp-variant is het type met een hoofdletter: het is een List.
Deze oefening maakt deel uit van de cursus
R-code optimaliseren met Rcpp
Oefeninstructies
- Maak de definitie af van een functie
create_vectors()die een paar vectors maakt.- Maak een onbenoemde character vector,
polygons, met de waarden"triangle","square"en"pentagon"in die volgorde. - Maak een benoemde integer vector,
mersenne_primes, met de waarden3,7en31in die volgorde. De namen moeten"first","second"en"third"zijn. - Maak een benoemde lijst,
both, metpolygonsenmersenne_primesin die volgorde. De namen moeten ookpolygonsenmersenne_primeszijn.
- Maak een onbenoemde character vector,
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
#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()
*/