Pernyataan IF, ELSE, ELSE IF pada R

⚡ Ringkasan Cerdas

Pernyataan If Else dan Else If di R memilih blok kode mana yang akan dijalankan berdasarkan kondisi logis. Panduan ini mencakup bentuk dua cabang, rantai multi-cabang, fungsi ifelse() yang di-vektorisasi, dan switch() untuk pencocokan yang tepat.

  • 🔀 Sintaks Inti: if (condition) { } else { } menjalankan satu cabang ketika pengujian BENAR dan cabang lainnya ketika pengujian SALAH.
  • 🔗 Beberapa Cabang: R menuliskan `else if` sebagai dua kata terpisah; tidak ada kata kunci `elif` seperti pada Python.
  • ⚠️ Perawatan Batas: Gunakan operator lebih besar atau sama dengan dan kurang dari atau sama dengan agar tidak ada nilai yang terlewatkan di antara cabang-cabang yang tidak diinginkan.
  • Bentuk Vektor: ifelse(test, yes, no) mengevaluasi seluruh vektor sekaligus, yang tidak dapat dilakukan oleh if.
  • Pencocokan Tepat: switch() menggantikan serangkaian panjang pengujian kesamaan dengan satu pencarian tunggal.
  • 🧮 OperaPilihan tor: Tanda ampersand tunggal berfungsi per elemen, sedangkan bentuk ganda digunakan untuk satu pernyataan TRUE atau FALSE di dalam if.

Pernyataan If Else Else If dalam R

Pernyataan if else di R

An jika lagi Pernyataan tersebut menjalankan satu blok kode ketika suatu kondisi BENAR dan blok kode lain ketika kondisi tersebut SALAH. Dalam R, sintaksnya adalah:

if (condition) {
    Expr1 
} else {
    Expr2
}

Pernyataan Jika Lain

Periksa apakah variabel bernama quantity lebih besar dari 20. Jika ya, kode akan mencetak "Anda menjual banyak!", jika tidak, kode akan mencetak "Tidak cukup untuk hari ini".

# Create vector quantity
quantity <-  25
# Set the if-else statement
if (quantity > 20) {
    print('You sold a lot!')
} else {
    print('Not enough for today')  
}

Keluaran:

## [1] "You sold a lot!"

NoteIndentasi tidak mengubah cara R menjalankan kode, tetapi indentasi yang konsistenlah yang membuat rangkaian kondisi yang panjang tetap mudah dibaca. Perhatikan juga bahwa tanda kurung kurawal penutup dan kata kunci else harus berada pada baris yang sama, jika tidak, R akan menganggap blok if sudah lengkap dan menampilkan kesalahan.

Pernyataan else if di R

Rantai melakukan pengujian lebih lanjut dengan lain jikaR tidak memiliki kata kunci elif, yaitu PythonDi R, Anda menulis kedua kata tersebut secara terpisah, dan Anda dapat menambahkan cabang sebanyak yang Anda butuhkan. Sintaksnya adalah:

if (condition1) { 
    expr1
    } else if (condition2) {
    expr2
    } else if  (condition3) {
    expr3
    } else {
    expr4
}

Misalkan Anda menginginkan tiga hasil: di bawah 20 cetakan "Tidak cukup untuk hari ini", antara 20 dan 30 cetakan "Hari biasa", dan di atas 30 cetakan "Hari yang luar biasa!".

Anda dapat mencoba mengubah jumlah kuantitasnya.

# Create the variable quantity
quantity <-  10
# Create multiple condition statement
if (quantity < 20) {
      print('Not enough for today')
} else if (quantity >= 20 & quantity <= 30) {
     print('Average day')
} else {
      print('What a great day!')
}

Keluaran:

## [1] "Not enough for today"

Contoh 2:

Tarif PPN berbeda-beda menurut kategori produk. Bayangkan ada tiga kategori, masing-masing dengan tarifnya sendiri:

KATEGORI Produk PPN
A Buku, majalah, koran, dll. 8%
B Sayuran, daging, minuman, dll. 10%
C Kaos oblong, jean, celana, dll. 20%

Rangkaian else if menerapkan tarif yang benar untuk apa pun yang dibeli pelanggan:

category <- 'A'
price <- 10
if (category =='A'){
  cat('A vat rate of 8% is applied.','The total price is',price *1.08)  
} else if (category =='B'){
    cat('A vat rate of 10% is applied.','The total price is',price *1.10)  
} else {
    cat('A vat rate of 20% is applied.','The total price is',price *1.20)  
}

Keluaran:

## A vat rate of 8% is applied. The total price is 10.8

Fungsi ifelse() yang Divektorisasi di R

Pernyataan if hanya menangani satu nilai. Jika diberikan vektor, R 4.2 atau versi yang lebih baru akan menampilkan kesalahan, karena kondisinya harus berupa TRUE atau FALSE tunggal. Fungsi ifelse() mengatasi hal ini dengan menguji setiap elemen sekaligus dan mengembalikan vektor dengan panjang yang sama.

quantities <- c(10, 25, 40, 18)

# if cannot do this
result <- ifelse(quantities > 20, 'You sold a lot!', 'Not enough for today')
result

Keluaran:

## [1] "Not enough for today" "You sold a lot!"      "You sold a lot!"      
## [4] "Not enough for today"

Tiga argumen tersebut adalah pengujian, nilai yang dikembalikan jika pengujian bernilai BENAR, dan nilai yang dikembalikan jika pengujian bernilai SALAH. Ketiga argumen tersebut diulang hingga memiliki panjang yang sama.

Penggunaan ifelse() bersarang akan mereproduksi rangkaian else if di seluruh vektor:

ifelse(quantities < 20, 'Not enough for today',
    ifelse(quantities <= 30, 'Average day', 'What a great day!'))

Ada dua batasan yang perlu diketahui. Fungsi ifelse() menghilangkan atribut seperti level faktor dan kelas Date dari hasilnya, dan mengevaluasi kedua cabang untuk setiap elemen, sehingga boros ketika salah satu cabang mahal. Alternatifnya adalah dplyr. kasus_ketika() menghindari penestingan sepenuhnya dan menjaga tipe tetap utuh:

library(dplyr)
case_when(
    quantities < 20  ~ 'Not enough for today',
    quantities <= 30 ~ 'Average day',
    TRUE             ~ 'What a great day!'
)

Pernyataan switch() di R

Ketika setiap cabang menguji variabel yang sama untuk kesamaan, rantai else if yang panjang menjadi sulit dibaca. switch() menggantinya dengan satu pencarian tunggal.

category <- 'A'
price <- 10

vat <- switch(category,
    'A' = 1.08,
    'B' = 1.10,
    'C' = 1.20,
    1.20)          # the unnamed last value is the default

cat('The total price is', price * vat)

Tiga aturan mengatur perilakunya:

  • Dengan argumen karakter, switch() mencocokkan nama secara persis. Tidak ada pencocokan sebagian dan tidak ada pencocokan pola.
  • Elemen akhir tanpa nama bertindak sebagai nilai default. Tanpa elemen tersebut, nilai yang tidak cocok akan mengembalikan NULL secara tidak terlihat, yang merupakan sumber umum dari bug yang tidak terdeteksi.
  • Dengan argumen bilangan bulat, switch() memilih berdasarkan posisi: switch(2, “a”, “b”, “c”) mengembalikan “b”.

Gunakan switch() untuk pencocokan persis terhadap sekumpulan nilai tetap, dan simpan else if untuk rentang dan kondisi gabungan, yang tidak dapat diungkapkan oleh switch(). Untuk menerapkan suatu kondisi berulang kali pada suatu urutan, gabungkan dengan sebuah kondisi. untuk loop atau loop sementara.

logis Operators dalam Kondisi R

Operator yang membentuk suatu kondisi berperilaku berbeda satu sama lain, dan perbedaan itu penting.

Operator Arti Gunakan di
& Elemen demi elemen DAN ifelse(), filter(), seluruh vektor
&& AND nilai tunggal, hubung singkat jika () dan sementara ()
| OR per elemen ifelse(), filter(), seluruh vektor
|| OR nilai tunggal, hubung singkat jika () dan sementara ()
! TIDAK, meniadakan pengujian Di manapun
%di dalam% Apakah nilainya ada dalam himpunan ini? Menggantikan rantai ruang operasi yang panjang

Mengapa korsleting itu penting. Bentuk ganda berhenti segera setelah jawabannya ditetapkan, sehingga sisi kanan tidak pernah dievaluasi ketika sisi kiri sudah menentukan hasilnya. Hal itu membuat penulisan klausa pengaman menjadi aman:

# Safe: length() is checked before x[1] is touched
if (length(x) > 0 && x[1] > 10) print('ok')

Membandingkan dengan beberapa nilai. Gunakan %in% daripada melakukan pengujian kesamaan berantai, karena lebih singkat dan lebih kecil kemungkinannya untuk salah ketik:

if (category %in% c('A', 'B')) {
    print('Reduced VAT rate applies')
}

Satu peringatan terakhir: tanda sama dengan (=) tunggal hanya menetapkan nilai, bukan membandingkan. Selalu tulis == di dalam sebuah kondisi.

Pernyataan Bersyarat dalam R: Referensi Cepat

Setiap konstruksi yang digunakan dalam tutorial ini tercantum di bawah ini:

Tujuan Code
Dua cabang
if (cond) { a } else { b }
Banyak cabang
if (c1) { a } else if (c2) { b } else { c }
Kondisi tervektorisasi
ifelse(test, yes, no)
Banyak cabang pada vektor
case_when(c1 ~ a, c2 ~ b, TRUE ~ c)
Pencarian kecocokan persis
switch(x, "A" = 1, "B" = 2, 0)
Tes keanggotaan
if (x %in% c("A", "B")) { }

Pertanyaan Umum Demo Slot

Fungsi `if` menangani satu nilai TRUE atau FALSE dan mengontrol blok kode mana yang akan dijalankan. `ifelse()` adalah fungsi vektorisasi yang menguji setiap elemen vektor dan mengembalikan vektor hasil.

Gunakan bentuk ganda di dalam pernyataan if dan while, di mana kondisi harus bernilai satu dan pemutusan sirkuit pendek melindungi sisi kanan. Gunakan bentuk tunggal untuk pengujian elemen per elemen pada seluruh vektor.

Sejak R 4.2, kondisi if harus bernilai tepat satu TRUE atau FALSE; vektor yang lebih panjang sekarang akan menimbulkan kesalahan, bukan peringatan. Gunakan ifelse(), any(), atau all() tergantung pada maksud Anda.

Kondisi menentukan aturan rekayasa fitur, penghentian lebih awal.ping Pemeriksaan selama pelatihan, dan keputusan ambang batas pada keluaran model. Bentuk vektorisasi seperti case_when() lebih disukai karena dapat diterapkan pada seluruh dataset.

Ya. Asisten AI dapat mendeteksi celah seperti nilai batas yang terlewat di setiap cabang, atau tanda sama dengan tunggal yang digunakan untuk perbandingan. Uji sendiri rantai yang telah diperbaiki pada nilai batas tersebut.

Ringkaslah postingan ini dengan: