Vektor mit vorgegebenen Werten erstellen
Anstatt einen Vektor zu definieren und seine Elemente anschließend zu füllen, kannst du einen Vektor erstellen und seine Werte in einer einzigen Codezeile mit ::create() angeben. Das ist eine statische Memberfunktion, also eine Methode des Vektortyps selbst und nicht einer Vektorvariablen. Mit create kannst du bis zu 20 Elemente angeben. (Für längere Vektoren musst du mehrere Codezeilen verwenden.)
Der folgende Code erstellt einen numerischen Vektor important_numbers mit pi, e und Unendlichkeit.
NumericVector numbers = NumericVector::create(PI, exp(1), INFINITY);
::create kann auch verwendet werden, um benannte Vektoren zu erzeugen. Die Syntax zum Benennen von Elementen lautet _["name"] = value. Hier ist derselbe Code noch einmal, diesmal mit Namen für die Elemente.
NumericVector numbers = NumericVector::create(_["pi"] = PI, _["e"] = exp(1), _["inf"] = INFINITY);
Genau wie in R verwendest du eine Liste, wenn du Variablen unterschiedlichen Typs zu einer anderen Variable kombinieren willst. In der Rcpp-Version ist der Typ großgeschrieben: Es ist eine List.
Diese Übung ist Teil des Kurses
R-Code mit Rcpp optimieren
Anleitung zur Übung
- Vervollständige die Definition einer Funktion
create_vectors(), die einige Vektoren erstellt.- Erzeuge einen unbenannten Zeichenkettenvektor
polygonsmit den Werten"triangle","square"und"pentagon"in dieser Reihenfolge. - Erzeuge einen benannten Integer-Vektor
mersenne_primesmit den Werten3,7und31in dieser Reihenfolge. Die Namen sollen"first","second"und"third"sein. - Erzeuge eine benannte Liste
both, diepolygonsundmersenne_primesin dieser Reihenfolge enthält. Die Namen sollen ebenfallspolygonsundmersenne_primessein.
- Erzeuge einen unbenannten Zeichenkettenvektor
Interaktive Übung
Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.
#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()
*/