Aan de slagGa gratis aan de slag

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

Cursus bekijken

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 waarden 3, 7 en 31 in die volgorde. De namen moeten "first", "second" en "third" zijn.
    • Maak een benoemde lijst, both, met polygons en mersenne_primes in die volgorde. De namen moeten ook polygons en mersenne_primes zijn.

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()
*/
Code bewerken en uitvoeren