MulaiMulai sekarang secara gratis

Gunakan && alih-alih &

Untuk menentukan apakah kedua dadu bernilai sama, fungsi move_square() menggunakan pernyataan if.

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

Operator & akan selalu mengevaluasi kedua argumennya. Artinya, jika Anda mengetik x & y, R akan selalu mencoba menghitung nilai x dan y. Ada beberapa kasus ketika hal ini tidak efisien. Misalnya, jika x bernilai FALSE, maka x & y akan selalu FALSE, apa pun nilai y. Dengan demikian, Anda dapat menghemat sedikit waktu pemrosesan dengan tidak menghitungnya. Operator && memanfaatkan trik ini, dan tidak akan repot menghitung y jika tidak memengaruhi hasil keseluruhan.

Dalam kode ini, jika is_double[1] bernilai FALSE kita tidak perlu mengevaluasi is_double[2] atau is_double[3], sehingga kita bisa memperoleh peningkatan kecepatan dengan menukar & menjadi &&.

Satu hal yang perlu dicatat adalah && hanya bekerja pada nilai logika tunggal, yaitu vektor logika dengan panjang 1 (seperti yang Anda berikan ke kondisi if), sedangkan & juga bekerja pada vektor dengan panjang lebih dari 1.

Latihan ini adalah bagian dari kursus

Menulis Kode R yang Efisien

Lihat Kursus

Petunjuk latihan

  1. Buat fungsi improved_move(), yang mirip dengan move(), tetapi menggunakan &&.
  2. Dengan menggunakan microbenchmark(), bandingkan improved_move() dengan versi sebelumnya move().

Latihan interaktif praktis

Cobalah latihan ini dengan menyelesaikan kode contoh berikut.

# 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)
Edit dan Jalankan Kode