Skaler rastgele sayı üretimi
R kodu yazarken, genellikle rastgele sayıları vektörleştirilmiş şekilde üretmek mantıklıdır. Ancak C++ tarafında döngü kullanmana ve veriyi öğe öğe işlemesine kimse kızmaz (vicdanın bile).
R API'si, yaygın dağılımlardan birinden rastgele sayı üretmek için fonksiyonlar sağlar ve Rcpp bu fonksiyonları R:: ad alanında erişilebilir kılar. Örneğin, R::rnorm(2, 3) sana ortalaması 2 ve standart sapması 3 olan Normal dağılımdan bir rastgele sayı verir. Dikkat edersen, "gerçek" rnorm() içindeki n argümanı burada yok. Rcpp sürümü her zaman tek bir sayı döndürür.
Şimdi positive_rnorm() fonksiyon tanımını tamamla.
Not: Bu son bölüm zorlu, o yüzden ilk denemede egzersizleri bitiremezsen moralini bozma. Bu kursu tamamlamanın ödülünü unutma: R kodunun performansını gözle görülür biçimde artırmak!
Bu egzersiz, kursun bir parçasıdır
Rcpp ile R Kodunu Optimize Etme
Egzersiz talimatları
- Dönüş değeri
out'u, boyutunolan sayısal bir vektör olarak belirt. - Döngü kodunu oku ve her birinin ne yaptığını gör.
- Ortalama
meanve standart sapmasdile bir normal rastgele sayı üret veout[i]'e ata. out[i]sıfıra küçük ya da eşit olduğu sürece tekrar dene.
Uygulamalı etkileşimli egzersiz
Bu egzersizi bu örnek kodu tamamlayarak deneyin.
#include
using namespace Rcpp;
// [[Rcpp::export]]
NumericVector positive_rnorm(int n, double mean, double sd) {
// Specify out as a numeric vector of size n
___ ___(___);
// This loops over the elements of out
for(int i = 0; i < n; i++) {
// This loop keeps trying to generate a value
do {
// Call R's rnorm()
out[i] = ___;
// While the number is negative, keep trying
} while(___);
}
return out;
}
/*** R
positive_rnorm(10, 2, 2)
*/