Funkcje eksportowane i nieeksportowane
Funkcje opatrzone specjalnym komentarzem [[Rcpp::export]] stają się dostępne w konsoli R. Zazwyczaj jednak nie chcesz eksportować do R każdej funkcji. Niektóre z nich możesz zachować jako wewnętrzne funkcje C++ – są to często funkcje obliczeniowe niższego poziomu lub funkcje pomocnicze.
Przypomnij sobie funkcję obliczającą odległość punktu w przestrzeni 2D od początku układu współrzędnych:
double dist( double x, double y) {
return sqrt( x*x + y*y ) ;
}
W tym ćwiczeniu zaktualizujesz kod tak, aby funkcja dist (eksportowana) wywoływała nieeksportowaną funkcję square, która po prostu podnosi wartość typu double do kwadratu.
To ćwiczenie jest częścią kursu
Optymalizacja kodu R za pomocą Rcpp
Instrukcje do ćwiczenia
- Uzupełnij definicję funkcji
square()tak, aby przyjmowała i zwracała wartość typudouble, … - równą iloczynowi
xrazyx. - Zaktualizuj definicję funkcji
dist(), aby korzystała zsquare()– tzn. zwracała pierwiastek kwadratowy z sumy kwadratuxi kwadratuy.
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
#include
using namespace Rcpp;
// Make square() accept and return a double
___ square(___ x) {
// Return x times x
return ___ ;
}
// [[Rcpp::export]]
double dist(double x, double y) {
// Change this to use square()
return sqrt(___ + ___);
}