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

& yerine && kullan

İki zarın aynı olup olmadığını belirlemek için, move_square() fonksiyonu if ifadeleri kullanır.

if (is_double[1] & is_double[2] & is_double[3]) {
    current <- 11 # Go To Jail - square 11 == Jail
}

& operatörü her zaman her iki argümanı da değerlendirir. Yani x & y yazarsan, R her zaman x ve y'nin ne olduğunu hesaplamaya çalışır. Bazı durumlarda bu verimsizdir. Örneğin x FALSE ise, x & y değeri y ne olursa olsun her zaman FALSE olur. Bu yüzden, onu hesaplamayarak biraz işlem zamanı kazanabilirsin. && operatörü bu hileden yararlanır ve genel sonuca etki etmeyecekse y'yi hesaplama zahmetine girmez.

Bu koddaki durumda, is_double[1] FALSE ise is_double[2] veya is_double[3]'ü değerlendirmemize gerek yok. Bu yüzden & yerine && kullanarak bir hız kazanımı elde edebiliriz.

Dikkat edilmesi gereken bir nokta, && yalnızca tek mantıksal değerlere (yani uzunluğu 1 olan mantıksal vektörlere; if koşuluna vereceğin türden) çalışır; & ise uzunluğu 1'den büyük vektörlerde de çalışır.

Bu egzersiz

Verimli R Kodu Yazma

kursunun bir parçasıdır
Kursu Görüntüle

Egzersiz talimatları

  1. move()'a benzer ama && kullanan bir improved_move() fonksiyonu oluştur.
  2. microbenchmark() kullanarak improved_move() ile önceki sürüm move()'u karşılaştır.

Uygulamalı interaktif egzersiz

Bu örnek kodu tamamlayarak bu egzersizi bitirin.

# Example data
is_double

# Define the previous solution
move <- function(is_double) {
    if (is_double[1] & is_double[2] & is_double[3]) {
        current <- 11 # Go To Jail
    }
}

# Define the improved solution
improved_move <- function(is_double) {
    if (is_double[1] ___ is_double[2] ___ is_double[3]) {
        current <- 11 # Go To Jail
    }
}

# microbenchmark both solutions
# Very occassionally the improved solution is actually a little slower
# This is just random chance
microbenchmark(___, ___, times = 1e5)
Kodu Düzenle ve Çalıştır