5+2Praktikum Pemrograman Statistika
Dasar-dasar Pemrograman R
Pendahuluan
R is a scripting language for statistical data manipulation and analysis. It was inspired by, and is mostly compatible with, the statistical language S developed by AT&T. The name S, for statistics, was an allusion to another programming language with a one-letter name developed at AT&T—the famous C language. S later was sold to a small firm, which added a graphical user interface (GUI) and named the result S-Plus. (Matloff, 2011)
R adalah bahasa pemrograman skrip untuk manipulasi dan analisis data statistik. Bahasa ini terinspirasi dari, dan sebagian besar kompatibel dengan, bahasa statistik S yang dikembangkan oleh AT&T. Nama S, yang merupakan singkatan dari statistics, merupakan kiasan terhadap bahasa pemrograman lain dengan nama satu huruf yang juga dikembangkan di AT&T—yaitu bahasa C yang terkenal. Kemudian, S dijual ke sebuah perusahaan kecil yang menambahkan antarmuka grafis (GUI) dan menamainya sebagai S-Plus. (Matloff, 2011)
R adalah bahasa pemrograman yang bersifat interpreter, artinya setiap perintah yang kita tulis akan langsung dijalankan oleh R tanpa perlu proses kompilasi. R juga bersifat interaktif, sehingga kita bisa mengetik perintah, mengeksekusinya, dan langsung melihat hasilnya di layar.
Contohnya, jika kita mengetik perintah berikut di konsol R:
Lalu menekan Enter, R akan langsung menampilkan hasilnya:
[1] 7
Semua perintah atau teks yang ditulis setelah tanda # tidak akan dieksekusi oleh R. Biasanya ini berguna untuk memberikan komentar atau catatan
# Ini contoh komentar, tidak akan dieksekusi
5+2[1] 7
Konsol R diawali tanda >, yang menunjukkan bahwa R siap menerima perintah baru. Jika perintah dimasukkan tidak lengkap, maka tanda tersebut akan berubah menjadi tanda +. Contohnya pada 2 kode dibawah ini:
# Perintah lengkap, R langsung mengeksekusi
10 * 2[1] 20
# Perintah tidak lengkap, R menunggu kelanjutan
10 *+ 5[1] 50
Memasukkan Nilai ke Objek di R
Apa itu Objek di R?
Objek adalah wadah untuk menyimpan suatu nilai atau data. Di R, kita bisa membuat objek menggunakan operator assignment. Ada tiga cara utama untuk memasukkan nilai ke objek:
| Operator Assignment | Format Umum | Contoh | Keterangan |
|---|---|---|---|
<- |
obj <- expr |
x <- 10 |
Cara paling umum dan direkomendasikan |
= |
obj = expr |
x = 10 |
Sama artinya, tapi jarang dipakai |
-> |
expr -> obj |
10 -> x |
Nilai di kiri dimasukkan ke variabel kanan |
Dalam R, sangat disarankan untuk menggunakan tanda <- sebagai operator assigment. obj <- expr berarti masukkan nilai hasil dari operasi di sisi kanan (expr) ke dalam objek di sisi kiri (obj).
Contoh Dasar Memasukkan Nilai
# Cara 1: Menggunakan operator <-
a <- 5
b <- 10Artinya, kita memasukkan nilai 5 ke dalam objek a dan nilai 10 ke dalam objek b.
# Cara 2: Menggunakan operator =
c = 15# Cara 3: Assignment kanan-ke-kiri
20 -> dUntuk menampilkan nilai yang ada di suatu Objek, kita cukup mengetikkan nama variabel terkait lalu enter, contohnya
a[1] 5
b[1] 10
c[1] 15
d[1] 20
atau bisa juga dengan fungsi print():
print(a)[1] 5
Contoh lainnya adalah
e <- 14+12
print(e)[1] 26
Penamaan Objek di R
Segala hal dalam R dipandang sebagai objek, misalnya data, fungsi, dan lain-lain. Objek-objek tersebut dapat “diberi nama” dengan apapun yang kita mau. Pada contoh sebelumnya, kita mempunyai objek dengan nama a, b, c, d dan e. Meskipun demikian, ada beberapa aturan penamaan objek dalam R yang harus dipenuhi, yaitu:
- Menggunakan kombinasi alfabet (
a-z,A-Z), angka (0-9), titik (.), atau underscore (_). - Hanya boleh diawali oleh alfabet, titik, atau underscore, tidak boleh diawali dengan angka.
- Tidak boleh mengandung:
- Spasi
- Tab
- Karakter khusus seperti
!,@,#,%,&, dan lainnya.
- Spasi
- Hindari menggunakan nama objek yang sudah ada di R, seperti:
c,q,s,t,diff,length,mean, dllFALSE,TRUE,Inf,NA,NaN,NULL,break,else,for, dll
Ketika membuat sebuah program dalam R (atau bahasa pemrograman apapun), disarankan untuk menggunakan penamaan yang lazim dan konsisten, seperti:
| Gaya Penamaan | Contoh |
|---|---|
| alllowercase | statistika |
| period.separated | statistika.time1 |
| underscore_separated | statistika_time1 |
| lowerCamelCase | statistikaTime1 |
| UpperCamelCase | StatistikaTime1 |
💡 Meskipun diizinkan, penggunaan underscore (_) sebaiknya dihindari karena jarang diterapkan di R.
R bersifat case-sensitive baik dalam penamaan objek maupun isi dari objek tersebut. Huruf kecil dan huruf besar menunjukkan hal berbeda. ABC berbeda dengan abc, berbeda pula dengan Abc maupun AbC dan seterusnya. Contohnya adalah
ABC <- 10
abc <- 20ABC[1] 10
abc[1] 20
Working Directory
Apa itu working directory?
Working Directory (folder kerja) adalah lokasi atau direktori aktif tempat R menjalankan semua proses saat ini. Semua proses membaca dan menyimpan file akan dilakukan secara default di working directory tersebut.
Mengecek working directory saat ini
Untuk mengetahui working directory yang sedang digunakan, gunakan fungsi getwd():
getwd()[1] "D:/S2-Semester 3/Asprak Pemrograman Statistika/Materi"
"D:/S2-Semester 3/Asprak Pemrograman Statistika/Materi" merupakan working directory yang saya gunakan untuk membuat materi ini.
Mengganti working directory
Untuk mengganti working directory, gunakan fungsi setwd() dengan menuliskan alamat directory tujuan:
setwd("D:/Statistika dan Sains Data IPB")Jika kita mengecek working directory saat dengan getwd(), maka akan menghasilkan
getwd()[1] "D:/Statistika dan Sains Data IPB"
Terlihat bahwa working directory saat ini adalah "D:/Statistika dan Sains Data IPB"
Pastikan saat menulis lokasi folder atau nama file di R, gunakan format path yang benar. Ada dua hal penting:
Mengakses Lokasi Folder atau File dengan Benar
Pastikan saat menulis lokasi folder atau nama file di R, gunakan format path yang benar. Ada beberapa hal penting yang perlu diperhatikan.
Gunakan Slash (/) atau Double Backslash (\\)** Pada Windows, tanda backslash (\) digunakan di Explorer, tapi di R harus diganti dengan slash (/) atau double backslash (\\).
Contoh salah ❌
setwd("D:\R Project\Materi") # ERROR!Contoh benar ✅
setwd("D:/R Project/Materi") # Disarankan
# atau
setwd("D:\\R Project\\Materi") # Alternatif amanUntuk mengakses file yang berada dalam folder kerja, cukup menuliskan nama filenya saja, misalnya
data <- read.csv("Data.csv")Jika kesulitan menentukan lokasi file, gunakan fungsi file.choose():
data <- read.csv(file.choose())R akan membuka jendela file picker, sehingga kita bisa memilih file langsung tanpa mengetik path.
💡 Tips Penting:
- Gunakan slash (
/) untuk menghindari error. - Jika menggunakan backslash (
\), tulis ganda menjadi\\. - Selalu gunakan tanda kutip
"..."untuk path dan nama file.
Mode Objek Data
R memiliki beberapa jenis mode objek dasar, yang disebut juga “atomic class”. Tipe ini menentukan bagaimana data disimpan dan bagaimana R memprosesnya.
Jenis Mode Objek Dasar
| Tipe Data | Contoh Nilai | Keterangan |
|---|---|---|
| character | “ipb”, “mahasiswa”, “statistika” | Berisi teks atau string |
| numeric | 12, 2.3, 1.2e-2 | Bilangan real (desimal) |
| complex | 1.2e6+2i | Bilangan kompleks |
| logical | TRUE, FALSE, T, F | Nilai logika (benar/salah) |
# Tipe character
nama <- "IPB University"
# Tipe numeric
angka <- 12.5
# Tipe complex
bilangan_kompleks <- 3 + 2i
# Tipe logical
lulus <- TRUEMengecek Tipe Data
Gunakan fungsi class() untuk mengetahui tipe objek:
class(nama) # character[1] "character"
class(angka) # numeric[1] "numeric"
class(bilangan_kompleks) # complex[1] "complex"
class(lulus) # logical[1] "logical"
Perbedaan Numeric dan Integer
Secara default, angka di R diperlakukan sebagai numeric (bilangan real). Artinya, sebuah angka yang terlihat sebagai 1 atau 2, sebetulnya direpresentasikan oleh R sebagai objek numerik, seperti 1.00 atau 2.00. Apabila kita menginginkan objek integer, kita harus menambahkan akhiran L. Misal untuk mendapatkan integer 1 harus ditulis 1L.
x <- 5 # numeric
y <- 5L # integerclass(x) # "numeric"[1] "numeric"
class(y) # "integer"[1] "integer"
Operasi Pada Character
Dalam R, karakter atau string adalah data yang diapit oleh tanda kutip (" " atau ' '). R menyediakan beberapa fungsi bawaan untuk memanipulasi dan menganalisis string.
Fungsi nchar() digunakan untuk menghitung jumlah karakter dalam sebuah string.
teks <- "Belajar R itu menyenangkan!"
nchar(teks)[1] 27
Fungsi paste() dan paste0 digunakan untuk menggabungkan dua atau lebih string. Secara default, paste() menambahkan spasi antar elemen, sedangkan paste0() tidak menambahkan spasi.
nama_depan <- "Muhammad"
nama_belakang <- "Yusran"# Menggabungkan dengan spasi
paste(nama_depan, nama_belakang)[1] "Muhammad Yusran"
# Menggabungkan tanpa spasi
paste0(nama_depan, nama_belakang)[1] "MuhammadYusran"
# Menggabungkan dengan pemisah kustom
paste(nama_depan, nama_belakang, sep = "_")[1] "Muhammad_Yusran"
Fungsi ini substr() dan substring() digunakan untuk mengambil sebagian karakter dari sebuah string. Terdapat sedikit perbedaan antara keduanya:
substr(teks, start, stop)digunakan untuk mengambil bagian string dari indeksstartsampaistop. Fungsi ini mewajibkan kita untuk menentukan kedua argumenstartdanstop. Fungsi ini cocok ketika kita tahu posisi awal dan akhir karakter yang diambil.substring(teks, first, last)digunakan untuk mengambil substring mulai dari indeksfirstsampailast. Jika argumenlasttidak diisi, maka substring akan diambil sampai akhir string. Fungsi ini lebih fleksibel dibandingsubstr()karena argumenlastbersifat opsional.
teks <- "Belajar Analisis Data"# Menggunakan substr(): ambil karakter ke-1 sampai ke-7
substr(teks, start = 1, stop = 7)[1] "Belajar"
# Menggunakan substring(): ambil mulai karakter ke-9 sampai akhir
substring(teks, first = 9)[1] "Analisis Data"
# substring juga bisa dibatasi sampai indeks tertentu
substring(teks, first = 9, last = 16)[1] "Analisis"
Struktur Data
Terdapat beberapa tipe objek data standar dalam R, yaitu:
| Struktur Data | Keterangan |
|---|---|
| Vector | Tipe data paling sederhana, semua elemen memiliki mode yang sama |
| Factor | Vektor dengan elemen berupa kategori |
| Matrix | Vektor berdimensi dua (baris × kolom) |
| Array | Penyimpanan data berdimensi lebih dari dua |
| Data Frame | Menyimpan data berbentuk tabel (baris dan kolom) |
| List | Vektor fleksibel, tiap elemen bisa beda tipe |
Vector
Vector adalah objek data paling sederhana dalam R dan digunakan oleh hampir semua fungsi aritmatik. Dalam vector, semua elemen harus memiliki mode yang sama (semua numerik, semua karakter, atau semua logika).
Membuat vector
Ada banyak cara membuat vector. Beberapa di antaranya adalah menggunakan perintah c(), seq() dan rep().
Menggunakan c() (Combine)
Sebuah vektor dapat dibuat dengan fungsi c() di mana setiap elemen dipisahkan oleh tanda koma.
# Membuat vector numerik
angka <- c(1, 2, 3, 4, 5)
angka[1] 1 2 3 4 5
# Membuat vector karakter
nama <- c("Uccang", "Syafiq", "Ngurah", "Adib")
nama[1] "Uccang" "Syafiq" "Ngurah" "Adib"
# Membuat vector logika
lulus <- c(TRUE, FALSE, TRUE)
lulus[1] TRUE FALSE TRUE
Jika kita mengecek type dari vector-vector tersebut, maka:
class(angka)[1] "numeric"
class(nama)[1] "character"
class(lulus)[1] "logical"
Kadang, kita memasukkan objek dengan mode berbeda ke dalam satu vektor, baik karena sengaja maupun tidak sengaja. Apa yang akan terjadi?
Dalam kasus seperti ini, R akan otomatis mengonversi semua elemen vektor ke dalam mode yang paling sesuai. Aturannya adalah:
Jika ada perbedaan tipe, R akan menaikkan prioritas tipe data ke urutan berikut: logical → numeric → character
vektor1 <- c(1.7, "statistika", 3.5)
vektor1[1] "1.7" "statistika" "3.5"
class(vektor1)[1] "character"
Pada contoh diatas, ada dua kemungkinan mode yaitu numerik dan character. Karena mengkonversi yang memungkinkan adalah konversi numerik ke karakter (bukan sebaliknya), maka akan mengkonversi 1.7 menjadi character “1.7”.
vektor2 <- c(10, TRUE, 5)
vektor2[1] 10 1 5
class(vektor2)[1] "numeric"
vektor3 <- c(TRUE, "IPB", FALSE)
vektor3[1] "TRUE" "IPB" "FALSE"
class(vektor3)[1] "character"
Menggunakan seq() (Sequence)
Fungsi seq() digunakan untuk membuat vector yang berisi angka berurutan. Misalnya kita ingin membuat Vector 1 sampai dengan 10, dengan incremental 1
bilangan <- seq(from = 1, to = 10)
bilangan [1] 1 2 3 4 5 6 7 8 9 10
atau bisa juga dengan cara singkat, yaitu menggunakan tanda titik dua : seperti perintah berikut:
bilangan1 <- 1:10
bilangan1 [1] 1 2 3 4 5 6 7 8 9 10
Bagaimana jika kita ingin membuat vector 1 sampai 10, tapi dengan incremental 2?
bilangan2 <- seq(from = 1, to = 10, by = 2)
bilangan2[1] 1 3 5 7 9
Menggunakan rep() (Repeat)
Fungsi rep() digunakan untuk membuat vector dengan mengulang nilai yang diinginkan, misalnya kita ingin mengulang angka 5 sebanyak 5 kali
ulangan <- rep(5, times = 4)
ulangan[1] 5 5 5 5
Bagaimana jika kita ingin mengulang beberapa nilai berbeda sekaligus, misalnya 1, 2, dan 3, masing-masing diulang dua kali?
rep_vector <- rep(c(1, 2, 3), times = 2)
rep_vector[1] 1 2 3 1 2 3
Kalau kita ingin mengulang tiap elemen dari vektor sebelum pindah ke elemen berikutnya, gunakan argumen each=.
rep_each <- rep(c(1, 2, 3), each = 2)
rep_each[1] 1 1 2 2 3 3
Perhatikan perbedaannya:
times=2→ ulang keseluruhan vektor dua kali:1 2 3 1 2 3each=2→ ulang setiap elemen dua kali:1 1 2 2 3 3
Mengakses element dari vector
Untuk mengambil nilai tertentu dari sebuah vector, kita menggunakan tanda kurung siku [ ] dengan menyertakan indeks posisi elemen. Ingat, indeks di R dimulai dari 1, bukan 0 seperti di beberapa bahasa pemrograman lain.
Gunakan indeks tunggal [posisi] untuk mengambil satu elemen tertentu:
angka <- c(10, 20, 30, 40, 50)
# Mengambil elemen ke-3
angka[3][1] 30
Gunakan vektor indeks untuk mengambil beberapa elemen sekaligus:
# Mengambil elemen ke-1 dan ke-4
angka[c(1, 4)][1] 10 40
# Mengambil elemen ke-2 sampai ke-5
angka[2:5][1] 20 30 40 50
Operasi pada vector
Dalam R, operasi aritmatika pada vektor dilakukan element by element (element-wise). Artinya, setiap elemen pada vektor pertama akan dipasangkan dengan elemen pada posisi yang sama di vektor kedua.
x <- c(2, 4, 6)
y <- c(1, 3, 5)
# Penjumlahan
x + y[1] 3 7 11
# Pengurangan
x - y[1] 1 1 1
# Perkalian
x * y[1] 2 12 30
# Pembagian
x / y[1] 2.000000 1.333333 1.200000
Jika dua vektor yang dioperasikan memiliki panjang berbeda, maka elemen vektor yang lebih pendek akan diulang (recycled) mengikuti panjang vektor yang lebih panjang.
c <- c(1, 2, 3, 4, 5)
d <- c(10, 20)
# Panjang vektor tidak proporsional
c + dWarning in c + d: longer object length is not a multiple of shorter object
length
[1] 11 22 13 24 15
Fungsi lain
Fungsi lain sering digunakan dalam vector adalah length(). Fungsi length() berguna untuk mengetahui panjang atau banyaknya elemen dari suatu vector.
length(angka)[1] 5
Factor
Faktor digunakan untuk merepresentasikan data kategorik, baik terurut/ordered maupun tidak terurut/unordered. Faktor dapat dianggap sebagai vektor di mana setiap elemennya memiliki label. Objek faktor dapat dibuat dengan fungsi factor().
Contoh, kita memiliki data tingkat pendidikan responden:
# Membuat faktor sederhana
pendidikan <- c("SD", "SMA", "SMP", "SD", "SMA", "SMP", "SD", "SMP")
pendidikan <- factor(pendidikan)
pendidikan[1] SD SMA SMP SD SMA SMP SD SMP
Levels: SD SMA SMP
atau
pendidikan <- factor(c("SD", "SMA", "SMP", "SD", "SMA", "SMP", "SD", "SMP"))
pendidikan[1] SD SMA SMP SD SMA SMP SD SMP
Levels: SD SMA SMP
Kita bisa mengatur urutan levels sesuai keinginan menggunakan argumen levels:
factor(pendidikan, levels = c("SD", "SMP", "SMA"))[1] SD SMA SMP SD SMA SMP SD SMP
Levels: SD SMP SMA
Jika data memiliki tingkatan tertentu, kita tambahkan argumen ordered = TRUE:
factor(pendidikan, levels = c("SD", "SMP", "SMA"), ordered = TRUE)[1] SD SMA SMP SD SMA SMP SD SMP
Levels: SD < SMP < SMA
length(pendidikan)[1] 8
class(pendidikan)[1] "factor"
| Aspek | Vektor Karakter | Faktor (Unordered) | Faktor (Ordered) |
|---|---|---|---|
| Definisi | Kumpulan nilai bertipe karakter tanpa atribut tambahan | Kumpulan kategori dengan label, tidak ada urutan antar level | Kumpulan kategori dengan urutan antar level |
| Fungsi Pembuat | c() |
factor() |
factor(..., ordered=TRUE) |
| Urutan Level | Tidak ada urutan | Level disimpan tapi tidak terurut | Level terurut sesuai argumen levels |
| Contoh Data | c("SD","SMA","SMP") |
factor(c("SD","SMA","SMP")) |
factor(c("SD","SMA","SMP"), levels=c("SD","SMP","SMA"), ordered=TRUE) |
| Output Levels | Tidak ada | Levels: SD SMA SMP |
Levels: SD < SMP < SMA |
| Perbandingan Nilai | Tidak bisa dibandingkan (>, < akan error) |
Tidak bisa dibandingkan | Bisa dibandingkan (SMA > SMP → TRUE) |
| Kapan Digunakan | Untuk menyimpan teks biasa tanpa analisis kategori | Untuk data kategorik tanpa hierarki, misalnya warna: merah, hijau, biru | Untuk data kategorik dengan hierarki, misalnya pendidikan, kepuasan, tingkat pendapatan |
# Vektor karakter biasa
vektor <- c("SD", "SMA", "SMP")
vektor[1] "SD" "SMA" "SMP"
# Faktor tidak terurut (unordered)
faktor_unordered <- factor(c("SD", "SMA", "SMP"))
faktor_unordered[1] SD SMA SMP
Levels: SD SMA SMP
# Faktor terurut (ordered)
faktor_ordered <- factor(c("SD", "SMA", "SMP"),
levels = c("SD", "SMP", "SMA"),
ordered = TRUE)
faktor_ordered[1] SD SMA SMP
Levels: SD < SMP < SMA
Matrix
Matriks merupakan vector yang berdimensi dua yaitu baris dan kolom. Matriks dapat dibuat dengan mengubah dimensi dari suatu vector.
Membuat matrix
Fungsi utama untuk membuat matriks adalah matrix(). Secara default, matriks dibentuk dengan cara column-wise (byrow = FALSE)— dimulai dari kolom pertama atas ke bawah, kemudian berlanjut ke kolom berikutnya. Misalnya kita akan membuat matriks berukuran 2x3
matriks1 <- matrix(1:6, nrow = 2, ncol = 3)
matriks1 [,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
Perhatikan bahwa pada sintaks di atas, terdapat beberapa argumen penting pada fungsi matrix(), yaitu nrow dan ncol. Apa fungsi kedua argumen ini?
Kalau kita ingin mengisi per baris, maka kita tambahkan argumen byrow = TRUE, sehingga akan mengisi baris pertama terlebih dahulu, mulai dari kiri ke kanan, dilanjutknya ke baris berikutnya.
matriks2 <- matrix(1:6, nrow = 2, ncol = 3, byrow = TRUE)
matriks2 [,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
Matriks dapat dibentuk secara langsung dari vector dengan cara menambahkan atribut dimensi.
matriks3 <- 1:10
dim(matriks3) <- c(2, 5)
matriks3 [,1] [,2] [,3] [,4] [,5]
[1,] 1 3 5 7 9
[2,] 2 4 6 8 10
Cara lain membentuk matriks adalah dengan penggabungan kolom dengan fungsi cbind() dan penggabungan baris dengan fungsi rbind().
x <- 1:3
y <- 10:12
cbind(x, y) x y
[1,] 1 10
[2,] 2 11
[3,] 3 12
rbind(x, y) [,1] [,2] [,3]
x 1 2 3
y 10 11 12
Mengakses elemen pada matriks
Elemen-elemen pada matriks dapat diakses menggunakan indeks baris dan indeks kolom dengan format: nama_matriks[baris, kolom]
Kita akan menggunakan matriks contoh berikut:
matriks4 <- matrix(1:9, nrow = 3, ncol = 3)
matriks4 [,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
Untuk mengambil satu elemen tertentu, maka digunakan indeks baris dan kolom.
# Mengambil elemen baris ke-2, kolom ke-3
matriks4[2, 3][1] 8
Untuk mengambil seluruh baris/kolom tertentu, maka gunakan indeks baris dan kosongkan indeks kolom, ataupun sebaliknya.
# Mengambil seluruh elemen baris ke-1
matriks4[1, ][1] 1 4 7
# Mengambil seluruh elemen kolom ke-2
matriks4[, 2][1] 4 5 6
Untuk mengambil beberapa baris atau kolom sekaligus, maka gunakan fungsi c() untuk memilih lebih dari satu indeks.
# Mengambil elemen baris 1 dan 3
matriks4[c(1, 3), ] [,1] [,2] [,3]
[1,] 1 4 7
[2,] 3 6 9
# Mengambil elemen kolom 1 dan 3
matriks4[, c(1, 3)] [,1] [,2]
[1,] 1 7
[2,] 2 8
[3,] 3 9
Operasi pada matrix
Transpose Matrix
Fungsi t() digunakan untuk menukar baris menjadi kolom dan sebaliknya.
# Membuat matriks 3x2
matriks5 <- matrix(1:6, nrow = 3, ncol = 2)
matriks5 [,1] [,2]
[1,] 1 4
[2,] 2 5
[3,] 3 6
# Transpose matriks
t(matriks5) [,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
Perkalian Matrix
# Membuat dua matriks 2x2
matriks5 <- matrix(c(1, 2, 3, 4), nrow = 2)
matriks6 <- matrix(c(5, 6, 7, 8), nrow = 2)
matriks5 [,1] [,2]
[1,] 1 3
[2,] 2 4
matriks6 [,1] [,2]
[1,] 5 7
[2,] 6 8
# Perkalian matriks5 %*% matriks6
hasil_kali <- matriks5 %*% matriks6
hasil_kali [,1] [,2]
[1,] 23 31
[2,] 34 46
Perkalian Matriks dengan Transpose
Vektor juga bisa dianggap sebagai matriks. Misalnya:
# Perkalian x^T x
t(matriks5) %*% matriks5 [,1] [,2]
[1,] 5 11
[2,] 11 25
# Perkalian x x^T
matriks5 %*% t(matriks5) [,1] [,2]
[1,] 10 14
[2,] 14 20
Matriks Diagonal (diag())
# Membuat matriks diagonal
diag(5) [,1] [,2] [,3] [,4] [,5]
[1,] 1 0 0 0 0
[2,] 0 1 0 0 0
[3,] 0 0 1 0 0
[4,] 0 0 0 1 0
[5,] 0 0 0 0 1
# Mengambil elemen diagonal dari hasil_kali
diag(hasil_kali)[1] 23 46
Matriks Invers dan Sistem Persamaan Linear
Fungsi solve() digunakan untuk mencari invers matriks dan menyelesaikan sistem persamaan linear.
# Matriks persegi
matriks7 <- matrix(c(2, 1, 1, 3), nrow = 2)
# Mencari invers matriks7
solve(matriks7) [,1] [,2]
[1,] 0.6 -0.2
[2,] -0.2 0.4
# Menyelesaikan sistem persamaan: matriks7*x = b
b <- c(1, 2)
solve(matriks7, b)[1] 0.2 0.6
Nilai dan Vektor Eigen
Fungsi eigen() digunakan untuk menghitung akar ciri (eigenvalues) dan vektor ciri (eigenvectors).
# Hitung nilai dan vektor eigen dari matriks7
eigen(matriks7)eigen() decomposition
$values
[1] 3.618034 1.381966
$vectors
[,1] [,2]
[1,] 0.5257311 -0.8506508
[2,] 0.8506508 0.5257311
| Operasi | Fungsi / Operator | Kegunaan |
|---|---|---|
| Transpose | t() |
Menukar baris ↔︎ kolom |
| Perkalian Matriks | %*% |
Perkalian antar matriks |
| Perkalian xᵀx | t(x) %*% x |
Perkalian transpose vektor dengan vektor |
| Perkalian xxᵀ | x %*% t(x) |
Perkalian vektor dengan transpose vektor |
| Matriks Diagonal | diag() |
- Membuat matriks diagonal - Mengambil elemen diagonal |
| Invers Matriks | solve() |
Menghitung invers matriks |
| Sistem Persamaan | solve(A, b) |
Menyelesaikan sistem persamaan linear |
| Nilai & Vektor Eigen | eigen() |
Menghitung eigenvalues & eigenvectors |
Array
Array adalah struktur data yang dapat menampung data multidimensi.
Jika matriks hanya memiliki dua dimensi (baris × kolom), maka array bisa memiliki lebih dari dua dimensi.
Membuat array
Array dapat dibuat menggunakan fungsi array(). Kita perlu menentukan data yang ingin dimasukkan dan bentuk dimensinya melalui argumen dim.
# Membuat dua vektor
v1 <- c(5, 10, 15, 20)
v2 <- c(25, 30, 35, 40, 45, 50, 55, 60)
# Membuat array 4 x 4 x 3
arr <- array(c(v1, v2), dim = c(4, 4, 3))
arr, , 1
[,1] [,2] [,3] [,4]
[1,] 5 25 45 5
[2,] 10 30 50 10
[3,] 15 35 55 15
[4,] 20 40 60 20
, , 2
[,1] [,2] [,3] [,4]
[1,] 25 45 5 25
[2,] 30 50 10 30
[3,] 35 55 15 35
[4,] 40 60 20 40
, , 3
[,1] [,2] [,3] [,4]
[1,] 45 5 25 45
[2,] 50 10 30 50
[3,] 55 15 35 55
[4,] 60 20 40 60
Pada contoh ini, array(c(v1, v2), dim = c(4, 4, 3)) membuat array berukuran 4 × 4 × 3 atau total 48 elemen. Karena data dari v1 dan v2 hanya berjumlah 12 angka, maka R akan mengulang data secara otomatis hingga semua slot terisi. Proses pengisian array dilakukan secara column-wise, yaitu mengisi kolom pertama penuh terlebih dahulu, kemudian kolom kedua, dan seterusnya. Setelah satu lapisan penuh (16 elemen), pengisian berlanjut ke lapisan berikutnya dengan pola yang sama, sehingga data tampak berulang pada setiap dimensi array.
Mengetahui Dimensi Array
Untuk mengecek dimensi dari sebuah array, gunakan fungsi dim():
class(arr)[1] "array"
dim(arr)[1] 4 4 3
Artinya, objek arr memiliki 4 baris, 4 kolom, dan 3 lapisan.
Data Frame
Data frame adalah struktur data dalam R yang digunakan untuk menyimpan data dalam bentuk tabel (baris × kolom). Baris dalam data frame merepresentasikan pengamatan/observasi, sedangkan kolom merepresentasikan peubah/variabel. Setiap elemen dalam kolom yang sama memiliki mode data yang sama, namun tiap kolom dapat memiliki mode berbeda (misalnya satu kolom numerik, kolom lain karakter).
Membuat data frame
Data frame dapat dibuat menggunakan fungsi data.frame():
# Membuat vektor
nama <- c("Uccang", "Syafiq", "Ngurah", "Adib")
umur <- c(24, 25, 24, 24)
jurusan <- c("Statistika", "Matematika", "Statistika", "Matematika")
# Membuat data frame
df <- data.frame(Nama = nama, Umur = umur, Jurusan = jurusan)
# Menampilkan data frame
df Nama Umur Jurusan
1 Uccang 24 Statistika
2 Syafiq 25 Matematika
3 Ngurah 24 Statistika
4 Adib 24 Matematika
Mengakses elemen pada dataframe
Ada beberapa cara untuk mengakses elemen, kolom, atau baris dalam data frame di R.
Mengakses Kolom dengan Nama Kolom
Kita menggunakan tanda $ untuk mengakses langsung kolom berdasarkan namanya:
df$Nama[1] "Uccang" "Syafiq" "Ngurah" "Adib"
df$Umur[1] 24 25 24 24
df$Jurusan[1] "Statistika" "Matematika" "Statistika" "Matematika"
Mengakses Kolom atau Baris Menggunakan Indeks
Format umumnya adalah df[baris, kolom]
Untuk mengakses kolom tertentu, misalnya kolom ke-1
df[, 1][1] "Uccang" "Syafiq" "Ngurah" "Adib"
Untuk mengakses beberapa kolom
df[, c(1, 3)] Nama Jurusan
1 Uccang Statistika
2 Syafiq Matematika
3 Ngurah Statistika
4 Adib Matematika
Untuk mengakses baris tertentu
df[2, ] Nama Umur Jurusan
2 Syafiq 25 Matematika
Untuk mengakses elemen tertentu, misalnya baris ke-3, kolom ke-2
df[3, 2][1] 24
Mengakses Kolom Menggunakan Nama dalam Indeks
Selain indeks numerik, nama kolom juga bisa dipakai sebagai indeks.
df[, "Jurusan"][1] "Statistika" "Matematika" "Statistika" "Matematika"
df[, c("Nama", "Umur")] Nama Umur
1 Uccang 24
2 Syafiq 25
3 Ngurah 24
4 Adib 24
List
List merupakan bentuk khusus dari vector yang memungkinkan setiap elemennya memiliki tipe data atau struktur yang berbeda-beda. Elemen list dapat berupa vector, matriks, array, data frame, atau bahkan list lainnya. List sangat berguna ketika kita ingin menyimpan berbagai jenis objek dalam satu wadah.
Membuat list
List dapat dibuat dengan fungsi list().
# Membuat variabel tunggal
nama <- "Uccang"
# Membuat vector numerik
nilai <- c(80, 85, 90)
# Membuat matriks
matriks_nilai <- matrix(1:6, nrow = 2)
# Membuat array 3 dimensi
array_nilai <- array(1:8, dim = c(2, 2, 2))
# Membuat data frame
df_mahasiswa <- data.frame(
nama = c("Uccang", "Syafiq", "Ngurah"),
umur = c(24, 23, 24),
lulus = c(TRUE, TRUE, FALSE)
)# Membuat list berisi berbagai objek
my_list <- list(
variabel = nama,
vector = nilai,
matriks = matriks_nilai,
array = array_nilai,
dataframe = df_mahasiswa
)
my_list$variabel
[1] "Uccang"
$vector
[1] 80 85 90
$matriks
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
$array
, , 1
[,1] [,2]
[1,] 1 3
[2,] 2 4
, , 2
[,1] [,2]
[1,] 5 7
[2,] 6 8
$dataframe
nama umur lulus
1 Uccang 24 TRUE
2 Syafiq 23 TRUE
3 Ngurah 24 FALSE
Mengakses Elemen List
Untuk mengakses isi elemen, maka digunakan [[ ]]
my_list[[1]] # Mengambil variabel 'nama'[1] "Uccang"
my_list[[2]] # Mengambil vector numerik[1] 80 85 90
my_list[[3]] # Mengambil matriks [,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
my_list[[4]] # Mengambil array, , 1
[,1] [,2]
[1,] 1 3
[2,] 2 4
, , 2
[,1] [,2]
[1,] 5 7
[2,] 6 8
my_list[[5]] # Mengambil data frame nama umur lulus
1 Uccang 24 TRUE
2 Syafiq 23 TRUE
3 Ngurah 24 FALSE
Untuk mengakses elemen berdasarkan nama objek di dalam list, maka digunakan $
my_list$variabel # Ambil variabel tunggal[1] "Uccang"
my_list$vector # Ambil vector numerik[1] 80 85 90
my_list$matriks # Ambil matriks [,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
my_list$array # Ambil array, , 1
[,1] [,2]
[1,] 1 3
[2,] 2 4
, , 2
[,1] [,2]
[1,] 5 7
[2,] 6 8
my_list$dataframe # Ambil data frame nama umur lulus
1 Uccang 24 TRUE
2 Syafiq 23 TRUE
3 Ngurah 24 FALSE
Untuk mengambil elemen dari suatu list sebagai list baru, maka digunakan [ ]
my_list[1] # Mengambil list berisi variabel$variabel
[1] "Uccang"
my_list[c(2,4)] # Mengambil list berisi vector & array$vector
[1] 80 85 90
$array
, , 1
[,1] [,2]
[1,] 1 3
[2,] 2 4
, , 2
[,1] [,2]
[1,] 5 7
[2,] 6 8
Catatan:
[[ ]]→ Mengambil isi elemen langsung[ ]→ Mengambil list baru berisi elemen tersebut
Nilai-Nilai Khusus di R
Dalam R, ada beberapa nilai khusus yang sering muncul ketika bekerja dengan data atau operasi matematis. Nilai-nilai ini memiliki arti khusus dan perlu dipahami untuk menghindari kebingungan saat analisis data.
| Nilai Khusus | Keterangan |
|---|---|
NULL |
Menunjukkan tidak ada nilai atau objek kosong. |
NA |
Singkatan dari Not Available. Digunakan untuk missing value atau data hilang. |
NaN |
Singkatan dari Not a Number. Biasanya muncul akibat operasi matematis yang tidak valid. |
Inf |
Singkatan dari Infinity. Hasil dari pembagian dengan nol atau nilai sangat besar. |
-Inf |
Negatif Infinity, biasanya dari pembagian bilangan negatif dengan nol. |
# NULL → Objek kosong
obj_kosong <- NULL
obj_kosongNULL
# NA → Missing value
data <- c(10, 20, NA, 40)
data[1] 10 20 NA 40
# NaN → Operasi tidak valid
hasil_nan <- 0/0
hasil_nan[1] NaN
# Inf dan -Inf → Nilai tak hingga
positif_inf <- 1/0
negatif_inf <- -1/0
positif_inf[1] Inf
negatif_inf[1] -Inf
Untuk mengecek apakah suatu elemen dalam vektor merupakan NA (missing value) atau NaN (Not a Number), R menyediakan fungsi is.na() dan is.nan().
# Membuat vektor dengan missing value (NA)
x <- c(1, 2, NA, 10, 3)
# Mengecek elemen mana yang NA
is.na(x)[1] FALSE FALSE TRUE FALSE FALSE
# Mengecek elemen mana yang NaN
is.nan(x)[1] FALSE FALSE FALSE FALSE FALSE
# Membuat vektor dengan NaN dan NA sekaligus
x <- c(1, 2, NaN, NA, 4)
# Mengecek elemen mana yang NaN
is.nan(x)[1] FALSE FALSE TRUE FALSE FALSE
| Aspek | NA (Not Available) | NaN (Not a Number) |
|---|---|---|
| Makna | Menunjukkan nilai hilang / missing | Hasil operasi matematis yang tidak valid |
| Contoh | Data survei kosong, data belum terisi | 0/0, sqrt(-1) |
| Fungsi cek | is.na() |
is.nan() |
| Hubungan | Semua NaN dianggap NA | Tidak semua NA adalah NaN |
Secara default, operasi pada objek yang mengandung NA akan menghasilkan NA.
# Vektor dengan NA
nilai <- c(10, 20, NA, 30)
# Menjumlahkan elemen
sum(nilai)[1] NA
# Menghitung rata-rata
mean(nilai)[1] NA
Untuk menghindari hasil NA, banyak fungsi di R memiliki argumen na.rm = TRUE yang artinya “hapus NA sebelum melakukan perhitungan”.
# Menghitung jumlah tanpa menyertakan NA
sum(nilai, na.rm = TRUE)[1] 60
# Menghitung rata-rata tanpa menyertakan NA
mean(nilai, na.rm = TRUE)[1] 20
Penamaan Objek dan Elemen dalam R
Dalam R, setiap objek maupun elemen di dalam objek dapat diberikan nama. Penamaan ini berguna untuk membuat kode lebih mudah dipahami. Ada beberapa cara memberi nama pada objek di R, baik untuk vector, list, matrix, maupun data frame.
Memberi Nama pada Elemen Vector
Untuk memberikan nama pada elemen-elemen vector, kita bisa menggunakan fungsi names().
# Membuat vector
x <- 1:3
# Mengecek nama elemen (belum ada)
names(x)NULL
# Memberikan nama pada setiap elemen
names(x) <- c("Makassar", "Bogor", "Jambi")
xMakassar Bogor Jambi
1 2 3
# Mengecek nama elemen
names(x)[1] "Makassar" "Bogor" "Jambi"
Memberi Nama pada Elemen List
Cara yang sama berlaku untuk list. Kita bisa menggunakan names() untuk memberikan nama pada setiap komponen list.
# Membuat list dengan beberapa objek
l <- list("A", 1:5, matrix(1:6, nrow=2), data.frame(num=c(10, 20), huruf=c("a", "b")))
# Mengecek nama elemen (belum ada)
names(l)NULL
# Memberikan nama pada elemen list
names(l) <- c("teks", "angka", "matriks", "tabel")
l$teks
[1] "A"
$angka
[1] 1 2 3 4 5
$matriks
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
$tabel
num huruf
1 10 a
2 20 b
# Mengecek nama elemen list
names(l)[1] "teks" "angka" "matriks" "tabel"
Memberi Nama Kolom dan Baris pada Matrix
Nama kolom dan baris pada matriks dapat diberikan menggunakan dimnames(), atau bisa juga diatur terpisah menggunakan colnames() dan rownames().
# Membuat matriks 2x2
m <- matrix(1:4, nrow=2, ncol=2)
# Memberi nama baris dan kolom menggunakan dimnames()
dimnames(m) <- list(c("Baris1", "Baris2"), c("Kolom1", "Kolom2"))
m Kolom1 Kolom2
Baris1 1 3
Baris2 2 4
# Mengganti nama kolom dan baris menggunakan colnames() dan rownames()
colnames(m) <- c("X", "Y")
rownames(m) <- c("A", "B")
m X Y
A 1 3
B 2 4
Memberi Nama Kolom dan Baris pada Data Frame
Pada data frame, nama kolom bisa diberikan dengan names(), dan nama baris bisa diatur dengan row.names().
# Membuat data frame sederhana
nilai <- c(75, 82, 90, 88)
kota <- c("Makassar", "Bogor", "Jambi", "Makassar")
df <- data.frame(nilai, kota)
df nilai kota
1 75 Makassar
2 82 Bogor
3 90 Jambi
4 88 Makassar
# Memberi nama kolom
names(df) <- c("Skor", "Kota")
df Skor Kota
1 75 Makassar
2 82 Bogor
3 90 Jambi
4 88 Makassar
row.names(df) <- c("A", "B", "C", "D")Ketika membuat data frame, R akan secara otomatis memberikan nama untuk kolom jika kita tidak menentukannya. Namun, nama default ini sering kurang rapi. Karena itu, sebaiknya memberi nama kolom secara eksplisit saat membuat data frame agar kode lebih mudah dibaca.
Operator di R
Dalam R, terdapat berbagai macam operator yang digunakan untuk melakukan operasi aritmetika, logika, perbandingan, manipulasi objek, dan penugasan.
Operator Aritmetika
| Operator | Keterangan | Contoh | Output |
|---|---|---|---|
| + | Penjumlahan | 5 + 3 |
8 |
| - | Pengurangan | 5 - 3 |
2 |
| * | Perkalian | 5 * 3 |
15 |
| / | Pembagian | 10 / 2 |
5 |
| ^ / ** | Pemangkatan | 2 ^ 3 |
8 |
| %% | Sisa bagi (modulus) | 10 %% 3 |
1 |
| %/% | Pembagian bulat | 10 %/% 3 |
3 |
| %*% | Perkalian matriks | A %*% B |
Matriks |
Operator Perbandingan
| Operator | Keterangan | Contoh | Output |
|---|---|---|---|
| == | Sama dengan | 5 == 5 |
TRUE |
| != | Tidak sama dengan | 5 != 3 |
TRUE |
| > | Lebih besar | 5 > 3 |
TRUE |
| < | Lebih kecil | 5 < 3 |
FALSE |
| >= | Lebih besar sama | 5 >= 5 |
TRUE |
| <= | Lebih kecil sama | 3 <= 5 |
TRUE |
Operator Logika
| Operator | Keterangan | Contoh | Output |
|---|---|---|---|
| & | AND elementwise | c(TRUE, FALSE) & c(TRUE, TRUE) |
TRUE FALSE |
| && | AND tunggal | (5 > 3) && (2 < 4) |
TRUE |
| | | OR elementwise | c(TRUE, FALSE) | c(FALSE, TRUE) |
TRUE TRUE |
| || | OR tunggal | (5 > 3) || (2 > 4) |
TRUE |
| ! | NOT | !TRUE |
FALSE |
Operator Penugasan
| Operator | Keterangan | Contoh |
|---|---|---|
| <- | Penugasan ke kiri | x <- 10 |
| -> | Penugasan ke kanan | 10 -> x |
| = | Alternatif assign | x = 10 |
| <<- | Penugasan global | x <<- 5 |
Operator Lain
| Operator | Keterangan | Contoh |
|---|---|---|
| $ | Mengakses elemen list/df | df$kolom1 |
| [ | Mengambil subset | x[1:3] |
| [[ | Mengambil elemen tunggal | list[[2]] |
| : | Urutan angka | 1:5 → 1 2 3 4 5 |
| ~ | Formula statistik | y ~ x |
Struktur Kendali
Struktur kendali digunakan untuk mengatur alur eksekusi program berdasarkan kondisi tertentu atau perulangan proses.
Dalam R, struktur kendali dibagi menjadi dua kelompok utama:
- Percabangan (Conditional Statements)
- Perulangan (Loops)
Percabangan (Conditional Statements)
Percabangan memungkinkan program mengambil keputusan berdasarkan kondisi logika.
if
Digunakan untuk mengeksekusi kode jika kondisi bernilai TRUE. Bentuk umum dari if adalah
if (expression) {
statement
}num <- 5
if (num >= 0) {
print("Positive")
}[1] "Positive"
Jika kondisi bernilai FALSE, maka tidak ada perintah yang dieksekusi.
if (num <= 0) {
print("Not Positive Number")
}if else
Digunakan untuk mengeksekusi salah satu dari dua blok kode berdasarkan kondisi.
Jika kondisi TRUE, maka blok pertama dijalankan, sedangkan jika FALSE, blok kedua dijalankan. Bentuk umum:
if (expression) {
statement1
} else {
statement2
}num <- -5
if(num > 0){
print("Non Negative")
} else {
print("Negative")
}[1] "Negative"
Kode di atas memiliki makna yang sama dengan kode di bawah ini, namun penulisan di atas lebih ringkas.
if(num > 0){
print("Non Negative")
}
if(num < 0){
print("Negative")
}[1] "Negative"
if else if
Digunakan untuk memeriksa beberapa kondisi secara berurutan.
Jika kondisi pertama tidak terpenuhi, maka kondisi kedua akan diperiksa, dan seterusnya. Bentuk umum:
if (kondisi1) {
statement1
} else if (kondisi2) {
statement2
} else if (kondisi3) {
statement3
}num <- -5
if (num > 0) {
print("Positive")
} else if (num < 0) {
print("Negative")
} else if (num == 0) {
print("Zero")
}[1] "Negative"
Jika ada banyak kondisi yang perlu dicek, maka struktur if else if dapat dibuat sepanjang kebutuhan. Penyusunan kondisi perlu dengan urutan yang logis agar kode lebih mudah dibaca dan dipahami.
Perulangan (Loops)
Perulangan digunakan untuk menjalankan blok kode secara berulang sampai kondisi tertentu tercapai.
Dalam R, terdapat tiga jenis utama perulangan:
forloopwhilelooprepeatloop
Selain itu, terdapat juga perintah break dan next untuk mengontrol proses perulangan.
for loop
for loop digunakan untuk mengiterasi elemen dalam sebuah vektor atau urutan tertentu. Bentuk umum:
for (val in sequence) {
statement
}angka <- c(2, 5, 8, 11, 14)
total <- 0
for (nilai in angka) {
total <- total + nilai
}
print(paste("Total penjumlahan:", total))[1] "Total penjumlahan: 40"
while loop
while loop digunakan untuk menjalankan perintah selama kondisi tertentu masih TRUE. Bentuk umum:
while (kondisi) {
statement
}i <- 1
while (i <= 5) {
print(paste("Iterasi ke-", i))
i <- i + 1
}[1] "Iterasi ke- 1"
[1] "Iterasi ke- 2"
[1] "Iterasi ke- 3"
[1] "Iterasi ke- 4"
[1] "Iterasi ke- 5"
Kode dibawah tidak akan menghasilkan output apa pun karena kondisi pada while-loop langsung bernilai FALSE sejak awal.
i <- 10
while (i <= 5) {
print(paste(i))
i <- i + 1
}break dan next
Dalam R, dua perintah penting yang sering digunakan di dalam perulangan adalah break dan next. Keduanya berfungsi mengontrol alur perulangan, namun cara kerjanya berbeda.
break→ Menghentikan perulangan sepenuhnya dan keluar dari loop.next→ Melewati iterasi saat ini dan langsung melanjutkan ke iterasi berikutnya.
Misalnya, kita ingin menghentikan loop saat menemukan angka ganjil pertama.
# Menghentikan loop ketika menemukan angka ganjil pertama yang lebih dari 11
angka <- 1:100
for (i in angka) {
if (i > 11 && i %% 2 != 0) {
print(paste("Angka ganjil pertama yang lebih dari 11 ditemukan:", i))
break # Menghentikan perulangan
}
print(paste("Angka genap atau angka <= 10:", i))
}[1] "Angka genap atau angka <= 10: 1"
[1] "Angka genap atau angka <= 10: 2"
[1] "Angka genap atau angka <= 10: 3"
[1] "Angka genap atau angka <= 10: 4"
[1] "Angka genap atau angka <= 10: 5"
[1] "Angka genap atau angka <= 10: 6"
[1] "Angka genap atau angka <= 10: 7"
[1] "Angka genap atau angka <= 10: 8"
[1] "Angka genap atau angka <= 10: 9"
[1] "Angka genap atau angka <= 10: 10"
[1] "Angka genap atau angka <= 10: 11"
[1] "Angka genap atau angka <= 10: 12"
[1] "Angka ganjil pertama yang lebih dari 11 ditemukan: 13"
Jika kita ingin melewati angka ganjil dan hanya menampilkan angka genap
# Melewati angka ganjil dan hanya mencetak angka genap
angka <- 1:10
for (i in angka) {
if (i %% 2 != 0) {
next # Lewati angka ganjil
}
print(paste("Angka genap:", i))
}[1] "Angka genap: 2"
[1] "Angka genap: 4"
[1] "Angka genap: 6"
[1] "Angka genap: 8"
[1] "Angka genap: 10"
Contoh berikut menunjukkan penggunaan break dan next pada while-loop untuk melewati angka ganjil dan menghentikan perulangan ketika nilai mencapai 8.
# Contoh penggunaan break dan next pada while-loop
i <- 1
while (i <= 10) {
if (i %% 2 != 0) {
i <- i + 1
next # Lewati angka ganjil
}
print(paste("Angka genap:", i))
if (i == 8) {
print("Berhenti di angka 8")
break # Hentikan loop jika i = 8
}
i <- i + 1
}[1] "Angka genap: 2"
[1] "Angka genap: 4"
[1] "Angka genap: 6"
[1] "Angka genap: 8"
[1] "Berhenti di angka 8"
repeat loop
repeat loop digunakan untuk menjalankan perintah tanpa batas sampai ada perintah break. Bentuk umum
repeat {
statement
if (kondisi) {
break
}
}Misalnya, kita ingin mencetak nilai yang dimulai dari angka 1 dan berhenti apabila nilainya sudah lebih dari 5.
x <- 1
repeat {
print(x)
x <- x + 1
if (x > 5) {
break
}
}[1] 1
[1] 2
[1] 3
[1] 4
[1] 5
Jika kita ingin mencetak nilai yang dimulai dari angka 1 dan berhenti apabila nilainya sudah lebih dari 5, tetapi kita tidak ingin mencetak angka 3.
x <- 1
repeat {
if (x == 3) {
x <- x + 1
next # Lewati angka 3
}
print(paste("Angka:", x))
x <- x + 1
if (x > 5) {
break # Hentikan loop jika x > 5
}
}[1] "Angka: 1"
[1] "Angka: 2"
[1] "Angka: 4"
[1] "Angka: 5"
Belajar R bukan hanya tentang menulis kode, tapi tentang eksplorasi. Jangan ragu untuk bereksperimen, karena setiap langkah membawa kita lebih dekat pada pemahaman. Temukan pola, cobalah berbagai cara, dan biarkan proses trial and error menuntunmu untuk belajar dan berkembang.
Referensi Tambahan