BaşlayınÜcretsiz başlayın

Eksik değerlerin ele alınması

R'da bir değerin eksik olup olmadığını test etmek için is.na(x) kullanman gerekir. (x == NA denersem ne olur?)

Rcpp'deki karşılığı statik is_na() metodudur. Statik, metodun belirli bir değişkene değil sınıfın kendisine ait olduğu anlamına gelir. Örneğin, NumericVector::is_na(x) ifadesi double x'in eksik değer olup olmadığını test eder.
Benzer şekilde, statik get_na() metodu ilgili sınıf için NA değerini verir. Örneğin, CharacterVector::get_na() eksik bir karakter değeri döndürür.

C++'daki mantıksal veya işleci, R'dakiyle aynıdır: ||.

Bu egzersiz, kursun bir parçasıdır

Rcpp ile R Kodunu Optimize Etme

Kursa Göz Atın

Egzersiz talimatları

  • Önceki egzersizdeki weighted_mean_cpp() fonksiyonunu güncelle ve x veya w üzerinde bir eksik değer görülür görülmez eksik bir değer döndürmesini sağla.
    • x'in i. elemanı NA mı ya da w'nun i. elemanı NA mı diye kontrol eden bir if bloğu ekle.
    • Bu if bloğunun içinde sayısal bir NA döndür.

Uygulamalı etkileşimli egzersiz

Bu egzersizi bu örnek kodu tamamlayarak deneyin.

#include 
using namespace Rcpp;

// [[Rcpp::export]]
double weighted_mean_cpp(NumericVector x, NumericVector w) {
  double total_w = 0;
  double total_xw = 0;
  
  int n = x.size();
  
  for(int i = 0; i < n; i++) {
    // If the ith element of x or w is NA then return NA
    ___
    
    
    total_w += w[i];
    total_xw += x[i] * w[i];
  }
  
  return total_xw / total_w;
}

/*** R 
x <- c(0, 1, 3, 6, 2, 7, 13, NA, 12, 21, 11)
w <- 1 / seq_along(x)
weighted_mean_cpp(x, w)
*/
Kodu Düzenle ve Çalıştır