Site icon agussuratna.net

Tutorial Bahasa R : #4 Fungsi dan Kontrol Aliran di R

Bagian ini akan membahas bagaimana kita dapat membuat fungsi kustom kita sendiri di R untuk mengorganisir kode dan membuatnya dapat digunakan kembali, serta bagaimana mengontrol alur eksekusi program menggunakan pernyataan kondisional dan perulangan.
Pernyataan percabangan memungkinkan program untuk membuat keputusan dan menjalankan blok kode yang berbeda berdasarkan kondisi tertentu. Di R, ini dilakukan menggunakan pernyataan if, else if, dan else.
Sintaks Dasar if:
if (kondisi) { 
    # Kode yang akan dieksekusi jika kondisi TRUE 
}
Sintaks Dasar if-else:
if (kondisi) { 
    # Kode jika kondisi TRUE 
} 
else { 
    # Kode jika kondisi FALSE 
}

 

Sintaks Dasar if-else if-else:
if (kondisi1) { 
    # Kode jika kondisi1 TRUE 
} 
else if (kondisi2) { 
    # Kode jika kondisi2 TRUE 
} 
else { 
    # Kode jika tidak ada kondisi yang TRUE 
}

 

Contoh Penggunaan Percabangan:
nilai_ujian <- 75 

if (nilai_ujian >= 80) { 
    print("Anda mendapatkan nilai A") 
} 
else if (nilai_ujian >= 70) { 
    print("Anda mendapatkan nilai B") 
} 
else if (nilai_ujian >= 60) { 
    print("Anda mendapatkan nilai C") 
} 
else { 
    print("Anda mendapatkan nilai D") 
}

 

Contoh lain: mengecek bilangan genap atau ganjil

bilangan <- 7 

if (bilangan %% 2 == 0) { 
    print(paste(bilangan, "adalah bilangan genap")) 
} 
else { 
    print(paste(bilangan, "adalah bilangan ganjil")) 
}

 

2. Perulangan (Looping) di R

Perulangan digunakan untuk menjalankan blok kode berulang kali. R menyediakan beberapa jenis perulangan, yang paling umum adalah for loop dan while loop.

a. for Loop

for loop digunakan ketika kita tahu berapa kali ingin mengulang blok kode, biasanya untuk setiap elemen dalam sebuah urutan (vektor, list, dan lain-lain).
Sintaks Dasar for Loop:
for (variabel_iterasi in urutan) { 
    # Kode yang akan dieksekusi 
}

 

Contoh Penggunaan for Loop:
# Mencetak angka dari 1 sampai 5 
for (i in 1:5) { 
    print(i) 
} 

# Mengulang melalui elemen vektor karakter 
buah_buahan <- c("apel", "jeruk", "mangga") 

for (buah in buah_buahan) { 
    print(paste("Saya suka", buah)) 
} 

# Menghitung jumlah elemen dalam vektor 
angka_data <- c(10, 20, 30, 40, 50) 
jumlah_total <- 0 

for (nilai in angka_data) { 
    jumlah_total <- jumlah_total + nilai 
} 

print(paste("Jumlah total:", jumlah_total))

 

b. while Loop

while loop digunakan ketika kita ingin mengulang blok kode selama suatu kondisi tertentu bernilai TRUE. Perulangan akan terus berlanjut sampai kondisi menjadi FALSE.
Sintaks Dasar while Loop:
while (kondisi) { 
    # Kode yang akan dieksekusi 
    # Pastikan ada perubahan yang membuat kondisi akhirnya FALSE 
}

 

Contoh Penggunaan while Loop:
# Mencetak angka selama kurang dari 5 
counter <- 1 

while (counter < 5) { 
    print(counter) 
    counter <- counter + 1 # Penting: pastikan counter bertambah agar loop berhenti 
} 

 

Contoh lain: mencari angka pertama yang lebih besar dari 10

angka_acak <- c(3, 8, 12, 5, 15) 
    i <- 1 

while (angka_acak[i] <= 10 && i <= length(angka_acak)) { 
    i <- i + 1 
} 

if (i <= length(angka_acak)) { 
    print(paste("Angka pertama yang lebih besar dari 10 adalah:", angka_acak[i])) 
} 
else { 
    print("Tidak ada angka yang lebih besar dari 10 ditemukan.") 
}

 

3. Fungsi (Function) di R

Fungsi adalah blok kode yang terorganisir dan dapat digunakan kembali yang melakukan tugas tertentu. Fungsi membantu dalam modularitas kode, mengurangi pengulangan, dan membuat program lebih mudah dikelola. R memiliki banyak fungsi bawaan, tetapi kita juga dapat membuat fungsi kustom kita sendiri.
Sintaks Dasar Membuat Fungsi Kustom :
nama_fungsi <- function(argumen1, argumen2, ...) { 
    # Blok kode fungsi 
    # ... 

    return(nilai_kembalian) # Opsional: mengembalikan nilai 
}
  • nama_fungsi: Nama yang kita berikan untuk fungsi.
  • function(): Kata kunci yang menunjukkan bahwa kita mendefinisikan sebuah fungsi.
  • argumen1, argumen2, …: Input yang diterima fungsi. Ini opsional.
  • return(): Pernyataan opsional yang digunakan untuk mengembalikan nilai dari fungsi. Jika tidak ada return(), fungsi akan mengembalikan hasil dari ekspresi terakhir yang dieksekusi.
Contoh Membuat dan Menggunakan Fungsi:
# Fungsi sederhana untuk menyapa nama 
sapa_nama <- function(nama) { 
    pesan <- paste("Halo,", nama, "! Selamat datang di R.") 
    return(pesan) 
} 

# Memanggil fungsi 
print(sapa_nama("Budi")) 
print(sapa_nama("Siti")) 

# Fungsi untuk menghitung luas persegi panjang 
    hitung_luas_persegi <- function(panjang, lebar) { 
    luas <- panjang * lebar return(luas) 
} 

# Memanggil fungsi dengan argumen 
luas_tanah <- hitung_luas_persegi(10, 5) 
print(paste("Luas tanah adalah:", luas_tanah, "meter persegi.")) 

# Fungsi dengan nilai default untuk argumen 
hitung_pajak <- function(harga, pajak_rate = 0.10) { 
    total_pajak <- harga * pajak_rate 
    total_bayar <- harga + total_pajak 
    return(total_bayar) 
} 

print(paste("Total bayar dengan pajak default:", hitung_pajak(100))) 
print(paste("Total bayar dengan pajak 5%:", hitung_pajak(100, 0.05)))

 

4. Fungsi apply Family

Fungsi-fungsi dalam “apply family” di R adalah alat yang sangat efisien untuk menerapkan fungsi ke margin (baris atau kolom) dari array, matriks, atau elemen-elemen dari list/vektor. Mereka seringkali lebih cepat dan lebih ringkas daripada menggunakan perulangan eksplisit (for loop) untuk tugas-tugas tertentu.

lapply(): Menerapkan fungsi ke setiap elemen list atau vektor

lapply() mengembalikan sebuah list yang berisi hasil penerapan fungsi ke setiap elemen input.
Sintaks:
lapply(X, FUN, ...)
  • X: Objek (list atau vektor) yang akan diiterasi.
  • FUN: Fungsi yang akan diterapkan ke setiap elemen.
Contoh lapply():
list_angka <- list(a = 1:3, b = 4:6, c = 7:9) 

# Menerapkan fungsi sum() ke setiap elemen list 
hasil_sum_lapply <- lapply(list_angka, sum) 
print(hasil_sum_lapply) 

# Output: 
# $a 
# [1] 6 
# 
# $b 
# [1] 15 
# 
# $c 
# [1] 24 

# Menerapkan fungsi sqrt() ke setiap elemen vektor 
vektor_data <- c(4, 9, 16, 25) 
hasil_sqrt_lapply <- lapply(vektor_data, sqrt) 
print(hasil_sqrt_lapply) 

# Output: 
# [[1]] 
# [1] 2 
# 
# [[2]] 
# [1] 3 
# ...

 

sapply(): Mirip dengan lapply(), tetapi mencoba menyederhanakan hasilnya

sapply() adalah versi lapply() yang lebih “user-friendly”. Jika memungkinkan, sapply() akan menyederhanakan hasil list menjadi vektor atau matriks.
Sintaks:
sapply(X, FUN, ...)

 

Contoh sapply():
# Menggunakan contoh yang sama dengan lapply() 
hasil_sum_sapply <- sapply(list_angka, sum) 
print(hasil_sum_sapply) 

# Output: 
# a b c 
# 6 15 24 

hasil_sqrt_sapply <- sapply(vektor_data, sqrt) 
print(hasil_sqrt_sapply) 

# Output: 
# [1] 2 3 4 5

 

apply(): Menerapkan fungsi ke margin (baris atau kolom) dari matriks atau array

apply() sangat berguna untuk melakukan operasi agregasi pada baris atau kolom matriks/array.
Sintaks:
apply(X, MARGIN, FUN, ...)
  • X: Matriks atau array.
  • MARGIN: 1 untuk menerapkan fungsi ke baris, 2 untuk menerapkan fungsi ke kolom.
  • FUN: Fungsi yang akan diterapkan.
Contoh apply():
matriks_nilai <- matrix(c(80, 90, 75, 85, 92, 88), nrow = 2, byrow = TRUE, dimnames = list(c("Siswa1", "Siswa2"), c("Matematika", "Fisika", "Kimia")))
print(matriks_nilai) 

# Menghitung rata-rata nilai per siswa (per baris) 
rata_rata_siswa <- apply(matriks_nilai, 1, mean) 
print(paste("Rata-rata nilai per siswa:", paste(rata_rata_siswa, collapse = ", "))) 

# Menghitung rata-rata nilai per mata pelajaran (per kolom) 
rata_rata_mapel <- apply(matriks_nilai, 2, mean) 
print(paste("Rata-rata nilai per mata pelajaran:", paste(rata_rata_mapel, collapse = ", ")))

Fungsi-fungsi apply family adalah bagian penting dari pemrograman R yang efisien, memungkinkan kita untuk menulis kode yang lebih bersih dan lebih cepat untuk tugas-tugas manipulasi data yang umum.

Referensi :

  • https://bookdown.org/moh_rosidi2610/Metode_Numerik
Exit mobile version