ALGORITME PEMROGRAMAN Abdul Kudus SSi MSi Ph D
ALGORITME & PEMROGRAMAN Abdul Kudus, SSi. , MSi. , Ph. D. Senin, 6. 30 – 9. 00 Rabu, 10. 00 – 12. 00 Rabu, 12. 00 – 14. 00
Perintah all() dan any() Perintah any(): apakah ada unsur yang TRUE dari isi vektor tsb. Perintah all(): apakah semua unsur dari vektor tsb adalah TRUE. > x <- 1: 5 > any(x > 3) [1] TRUE > any(x > 33) [1] FALSE > all(x > 0) [1] TRUE Misalnya ketika memproses perintah > any(x > 8) Maka pertama-tama R memproses x > 8, yang hasilnya (FALSE, TRUE) Kemudian dikenakan perintah any, yang memeriksa apakah ada unsur yang TRUE. Begitu juga ketika dikenakan perintah all.
Contoh: Mencari subskrip dimana muncul dua angka 1 berturutan Dari vektor yang hanya berisi angka 0 atau 1, kita ingin mencari subskrip awal dimana muncul dua buah angka 1 secara berturutan. Misal: vektor subskrip 1 0 0 1 1 1 2 3 4 5 6 7 8 9 Mulai pada subskrip: 1 apakah unsur ke-1 dan ke-2 = (1, 1), Tidak 2 apakah unsur ke-2 dan ke-3 = (1, 1), Tidak 3 apakah unsur ke-3 dan ke-4 = (1, 1), Tidak 4 apakah unsur ke-4 dan ke-5 = (1, 1), Ya 5 apakah unsur ke-5 dan ke-6 = (1, 1), Ya 6 apakah unsur ke-6 dan ke-7 = (1, 1), Tidak 7 apakah unsur ke-7 dan ke-8 = (1, 1), Tidak 8 apakah unsur ke-8 dan ke-9 = (1, 1), Ya Pemeriksaan cukup sampai subskrip ke-8 Jadi hasilnya adalah (4, 5, 8)
cari 2 angka 1 <- function(x) { n <- length(x) hasil <- NULL for (i in 1: (n-1)) { if (all(x[i: (i+1)]==1)) hasil <- c(hasil, i) } return(hasil) } > x <- c(1, 0, 0, 1, 1, 1, 0, 1, 1) > cari 2 angka 1(x) [1] 4 5 8 Bagaimana jika mencari tiga buah angka 1 berturutan? Bagaimana jika mencari k buah angka 1 berturutan?
Nilai NA dan NULL NA untuk data hilang (ada tapi tidak diketahui) NULL untuk data yang tidak ada Penggunaan NA Dalam banyak rumus statistika, kita harus mengabaikan data hilang. > x <- c(88, NA, 12, 168, 13) >x [1] 88 NA 12 168 13 > mean(x) [1] NA > mean(x, na. rm=TRUE) [1] 70. 25 > x <- c(88, NULL, 12, 168, 13) > mean(x) [1] 70. 25
Penggunaan NULL Salah satu penggunaan NULL adalah utk membuat vektor dalam loop (perulangan). # membuat vektor bilangan genap dalam jangkauan 1: 10 > z <- NULL > for (i in 1: 10) if (i %%2 == 0) z <- c(z, i) >z [1] 2 4 6 8 10 Jika kita ganti dengan NA, maka akan salah > z <- NA > for (i in 1: 10) if (i %%2 == 0) z <- c(z, i) >z [1] NA 2 4 6 8 10
Nilai NULL dianggap tidak ada > u <- NULL > length(u) [1] 0 > v <- NA > length(v) [1] 1
Menyaring (Filtering) Kita bisa mengambil unsur-unsur dari vektor yang memenuhi syarat tertentu. Membuat Indeks Saringan > z <- c(5, 2, -3, 8) > w <- z[z*z > 8] >w [1] 5 -3 8 Perhatikan bagian demi bagian > z <- c(5, 2, -3, 8) >z [1] 5 2 -3 8 > z*z > 8 [1] TRUE FALSE TRUE > z[c(TRUE, FALSE, TRUE)] [1] 5 -3 8
Atau digunakan utk menyaring dr vektor lain. atau lebih ringkas > z <- c(5, 2, -3, 8) > j <- z*z > 8 > y <- c(1, 2, 30, 5) >j > y[z*z > 8] [1] TRUE FALSE TRUE [1] 1 30 5 > y <- c(1, 2, 30, 5) > y[j] [1] 1 30 5 Contoh lain, bagi unsur-unsur vektor x yg lebih besar dari 3, kita ingin ganti dengan 0. > x[x > 3] <- 0 diperiksa sbb: > x <- c(1, 3, 8, 2, 20) > x[x > 3] <- 0 >x [1] 1 3 0 2 0
Menyaring dengan Perintah Subset() Berbeda dalam menangani NA > x <- c(6, 1: 3, NA, 12) >x [1] 6 1 2 3 NA 12 > x[x > 5] [1] 6 NA 12 > subset(x, x > 5) [1] 6 12
Memilih dengan Perintah which() Ingin mencari subskrip (posisi) dimana syarat penyaringan terpenuhi. > z <- c(5, 2, -3, 8) > which(z*z > 8) [1] 1 3 4 Ingat program utk mencari subskrip dr angka 1 pertama. first 1 <- function(x) { for (i in 1: length(x)) { if (x[i] == 1) break # keluar dr loop } return(i) } first 1 a <- function(x) return(which(x == 1)[1])
Perintah ifelse() Bentuk umumnya adalah: ifelse(b, u, v) dimana b harus berupa vektor logika (Boolean) Hasil dari perinta ifelse akan berupa vektor, dimana > x <- 1: 10 > y <- ifelse(x %% 2 == 0, 5, 12) # %% modulo operator >y [1] 12 5 12 5 Unsur-unsur dr vektor hasil, yaitu y, adalah
Contoh lain: > x <- c(5, 2, 9, 12) > ifelse(x > 6, 2*x, 3*x) [1] 15 6 18 24 Memeriksa Kesamaan Vektor > x <- 1: 3 > y <- c(1, 3, 4) > x == y [1] TRUE FALSE > all(x == y) [1] FALSE atau > identical(x, y) [1] FALSE
Tapi hati-hati dengan perintah identical > x <- 1: 2 > y <- c(1, 2) >x [1] 1 2 >y [1] 1 2 > identical(x, y) [1] FALSE > typeof(x) [1] "integer" > typeof(y) [1] "double"
Memberi Label (Nama) kepada Unsur-unsur Vektor > x <- c(1, 2, 4) > names(x) NULL > names(x) <- c("a", "b", "ab") > names(x) [1] "a" "b" "ab" >x a b ab 124 Buang label yg terlanjur diberikan > names(x) <- NULL >x [1] 1 2 4 Merujuk unsur dengan labelnya > x <- c(1, 2, 4) > names(x) <- c("a", "b", "ab") > x["b"] b 2
- Slides: 15