Tworzenie wektora z podanymi wartościami
Zamiast najpierw definiować wektor, a potem wypełniać jego elementy, można utworzyć wektor i od razu podać jego wartości – w jednej linii kodu – używając ::create(). Jest to statyczna funkcja składowa, czyli metoda samego typu wektora, a nie metoda konkretnej zmiennej wektorowej. Za pomocą create możesz podać maksymalnie 20 elementów. (W przypadku dłuższych wektorów konieczne jest użycie kilku linii kodu.)
Poniższy kod tworzy wektor numeryczny important_numbers zawierający pi, e i nieskończoność.
NumericVector numbers = NumericVector::create(PI, exp(1), INFINITY);
::create pozwala też tworzyć wektory nazwane. Składnia nadawania nazw elementom wygląda tak: _["name"] = value. Oto ten sam kod z nazwanymi elementami.
NumericVector numbers = NumericVector::create(_["pi"] = PI, _["e"] = exp(1), _["inf"] = INFINITY);
Podobnie jak w R, jeśli chcesz połączyć zmienne różnych typów w jedną strukturę, używasz listy. W wersji Rcpp nazwa typu jest zapisywana wielką literą – to List.
To ćwiczenie jest częścią kursu
Optymalizacja kodu R za pomocą Rcpp
Instrukcje do ćwiczenia
- Uzupełnij definicję funkcji
create_vectors(), która tworzy kilka wektorów.- Utwórz nienazwany wektor znakowy
polygonszawierający wartości"triangle","square"i"pentagon"– w tej kolejności. - Utwórz nazwany wektor całkowitoliczbowy
mersenne_primeszawierający wartości3,7i31– w tej kolejności. Nazwy elementów powinny brzmieć"first","second"i"third". - Utwórz nazwaną listę
bothzawierającąpolygonsimersenne_primes– w tej kolejności. Nazwy elementów powinny być takie same:polygonsimersenne_primes.
- Utwórz nienazwany wektor znakowy
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
#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()
*/