& 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ırEgzersiz talimatları
move()'a benzer ama&&kullanan birimproved_move()fonksiyonu oluştur.microbenchmark()kullanarakimproved_move()ile önceki sürümmove()'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)