ALGORITME & PEMROGRAMAN Abdul Kudus, SSi., MSi., PhD. 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. Misalnya ketika memproses perintah > any(x > 8) > x <- 1:5 > any(x > 3) [1] TRUE > any(x > 33) [1] FALSE > all(x > 33) > all(x > 0) Maka pertama-tama R memproses x > 8, yang hasilnya (FALSE,FALSE,FALSE,TRUE,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 1 2 3 4 5 6 7 8 9 subskrip 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)
cari2angka1 <- 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) > cari2angka1(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)
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 TRUE > z[c(TRUE,FALSE,TRUE,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 > j [1] TRUE FALSE TRUE TRUE > y <- c(1,2,30,5) > y[j] [1] 1 30 5 > z <- c(5,2,-3,8) > y <- c(1,2,30,5) > y[z*z > 8] [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. first1 <- function(x) { for (i in 1:length(x)) { if (x[i] == 1) break # keluar dr loop } return(i) first1a <- 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 12 5 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 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 > 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") [1] "a" "b" "ab" > x a b ab 1 2 4 Merujuk unsur dengan labelnya > x <- c(1,2,4) > names(x) <- c("a","b","ab") > x["b"] b 2 Buang label yg terlanjur diberikan > names(x) <- NULL > x [1] 1 2 4