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
<Kurs>R-Code mit Rcpp optimieren</Kurs>Übungsanweisungen
- 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 praktische Übung
Versuche dich an dieser Übung, indem du diesen Beispielcode vervollständigst.
#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()
*/