Zacznij terazZacznij za darmo

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

Zobacz kurs

Instrukcje do ćwiczenia

  • Uzupełnij definicję funkcji create_vectors(), która tworzy kilka wektorów.
    • Utwórz nienazwany wektor znakowy polygons zawierający wartości "triangle", "square" i "pentagon" – w tej kolejności.
    • Utwórz nazwany wektor całkowitoliczbowy mersenne_primes zawierający wartości 3, 7 i 31 – w tej kolejności. Nazwy elementów powinny brzmieć "first", "second" i "third".
    • Utwórz nazwaną listę both zawierającą polygons i mersenne_primes – w tej kolejności. Nazwy elementów powinny być takie same: polygons i mersenne_primes.

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()
*/
Edytuj i uruchom kod