51
ALGORITMA & PEMROGRAMAN Abdul Kudus, SSi., MSi., PhD. e-mail: 1) [email protected] 2) [email protected] blog: abdulkudus.staff.unisba.ac.id

Algoritme Dan Pemrograman Dengan R Ttg Struktur Data

Embed Size (px)

DESCRIPTION

program R

Citation preview

ALGORITMA & PEMROGRAMAN

ALGORITMA & PEMROGRAMANAbdul Kudus, SSi., MSi., PhD.e-mail:1) [email protected]) [email protected]: abdulkudus.staff.unisba.ac.idRR adalah software open-source untuk pemrograman statistik.open-source = gratisR dibangun berdasarkan bahasa pemrograman S, yang diciptakan oleh John Chambers dkk di Laboratorium Bell pada tahun 1976.Pada tahun 1993, Robert Gentleman dan Ross Ihaka di University of Auckland bereksperimen dengan bahasa S ini. Hasil eksperimennya disebut R.Sejak tahun 1995, R menjadi open-source dan ratusan ilmuwan dunia bersama-sama mengembangkannya.S-Plus adalah software komersial yang juga dikembangkan berdasarkan bahasa S. Software R terutama terdiri atas perintah-perintah komputer, dimana kita harus mengetikkan perintahnya agar supaya komputer menjalankan perintah tsb.

Mengapa kita pilih software yang demikian?Software yang berbasiskan menu memang mudah untuk digunakan, tapi terbatas hanya pada perintah-perintah tertentu saja.Software yang berbasiskan perintah adalah sangat terbuka untuk mengerjakan apa saja. Kalau kita ingin mengerjakan suatu perintah dengan komputer yang belum pernah dilakukan orang lain sebelumnya, kita bisa buat perintah tsb sendiri.Syntax RPerintah R diketikkan di jendela console setelah tanda >Sebagai contoh, R dapat digunakan sebagai kalkulator> 5 + 49[1] 54

> 1:20 [1] 1 2 3 4 5 6 7 8 9 10 11 12[13] 13 14 15 16 17 18 19 20

> # "*" adalah simbol untuk perkalian> # Kata-kata setelah tanda # adalah komentar> # yang akan diabaikan oleh R> 3 * 5[1] 15> 3 - 8[1] -5> 12 / 4[1] 3Operasi dasar + (tambah), - (kurang), * (kali) dan / (bagi) bisa langsung dikerjakan dalam R.R juga bisa mengerjakan pangkat.> 3^4[1] 81

Struktur Data dalam RVektorPerintah c() digunakan untuk membuat vektor data.> c(0, 7, 8)[1] 0 7 8Kita juga bisa menyimpannya dalam suatu obyek.> x x[1] 0 7 8

Simbol : digunakan untuk membuat barisan bilangan (baik menaik ataupun menurun)

> bil5sampai20 bil5sampai20 [1] 5 6 7 8 9 10 11 12 13 14 15 16[13] 17 18 19 20

Vektor bisa digabungkan dengan perintah c()

> gabung gabung [1] 5 6 7 8 9 10 11 12 13 14 15 16[13] 17 18 19 20 0 7 8

Mengakses elemen dari suatu vektor menggunakan []

> gabung[18][1] 7

Kita bisa mengakses lebih dari satu elemen

> gabung[c(1,5,17)][1] 5 9 0

Untuk mengakses elemen-elemen yg berurutan gunakan :

> gabung[2:5][1] 6 7 8 9

Untuk mengecualikan bisa menggunakan -

> gabung[-1] [1] 6 7 8 9 10 11 12 13 14 15 16 17[13] 18 19 20 0 7 8Mengambil unsur dgn Rumusan Logikawhichwhich.minwhich.maxPerintah all() dan any()Perintah any(): apakah ada unsur yang TRUE dari isi vektor tsb.> x any(x > 3)[1] TRUE> any(x > 33)[1] FALSE> all(x > 33)[1] FALSE> all(x > 0)[1] TRUEPerintah all(): apakah semua unsur dari vektor tsb adalah TRUE.Misalnya ketika memproses perintah> any(x > 8)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.Vektor AritmetikMengalikan setiap elemen dari suatu vektor dengan skalar:> x * 3[1] 0 21 24Tambah (+), kurang (-) dan bagi (/) juga bisa dilakukan dgn cara yang sama > y x ^ 3 # x dipangkatkan 3> y ^ x # setiap unsur y dipangkatkan dengan setiap unsur x yang bersesuaian.Vektor BerpolaOperator : digunakan untuk membuat barisan bilangan bulat. Vektor berpola dapat dibuat dengan perintah seq dan rep. Contoh barisan bilangan ganjil yang kurang dari atau sama dengan 21 dibuat dengan cara:> seq(1, 21, by=2)Pola berulang dibuat dengan rep(), contoh:> rep(3, times=12) # ulang nilai 3, 12 kali [1] 3 3 3 3 3 3 3 3 3 3 3 3> rep(seq(2, 20, by=2), 2) # ulang pola 2 4 ... 20, dua kali [1] 2 4 6 8 10 12 14 16 18 20 2 4 6 8 10 12 14 16 18 20> rep(c(1, 4), c(3, 2)) # ulang 1, 3 kali dan 4, 2 kali[1] 1 1 1 4 4> rep(seq(2, 20, 2), rep(2, 10)) # ulang setiap unsur sebanyak 2 kali [1] 2 2 4 4 6 6 8 8 10 10 12 12 14 14 16 16 18 18 20 20 Vektor Huruf (Character / String Vector )Skalar dan vektor bisa juga berisi kata (kalimat) atau huruf. Semua unsur dari vektor haruslah mempunyai jenis yang sama.> colors more.colors # tambahkan bbrp unsur baru> z more.colors[1] "red "yellow "blue "green" "magenta" "cyan" > z[1] "red "green" "1"Memberi Label (Nama) kepada Unsur-unsur Vektor> x names(x)NULL> names(x) names(x)[1] "a" "b" "ab"> xa b ab1 2 4Buang label yg terlanjur diberikan> names(x) x[1] 1 2 4Merujuk unsur dengan labelnya> x names(x) x["b"]b2Membuat MatriksSalah satu cara membuat matriks adalah dengan perintah matrix().> y y[,1] [,2][1,] 1 3[2,] 2 4Matriks dan Array> y[,2][1] 3 4Cara lain membuatnya adalah menyatakan unsur secara sendiri-sendiri> y y[1,1] y[2,1] y[1,2] y[2,2] y[,1] [,2][1,] 1 3[2,] 2 4diisi kolom per kolomKita bisa mengisi baris per baris> m m[,1] [,2] [,3][1,] 1 2 3[2,] 4 5 6Operasi Matriks- Operasi Aljabar Linier> y %*% y # perkalian matriks[,1] [,2][1,] 7 15[2,]10 22> 3*y # perkalian dengan skalar[,1] [,2][1,] 3 9[2,] 6 12> y+y # tambah[,1] [,2][1,] 2 6[2,] 4 8- Pengindeksan (Subskrip) Matriks> z [,1] [,2] [,3][1,] 1 1 1[2,] 2 1 0[3,] 3 0 1[4,] 4 0 0> z[,2:3][,1] [,2][1,] 1 1[2,] 1 0[3,] 0 1[4,] 0 0Ambil kolom ke-2 dan ke-3> y[,1] [,2][1,]11 12[2,]21 22[3,]31 32> y[2:3,][,1] [,2][1,]21 22[2,]31 32> y[2:3,2][1] 22 32Menghindari Reduksi Dimensi yg Tidak Diinginkan> z[,1] [,2][1,] 1 5[2,] 2 6[3,] 3 7[4,] 4 8> r r[1] 2 6z adalah matriksr adalah vektor (terjadi reduksi dimensi)> attributes(z)$dim[1] 4 2> attributes(r)NULL> str(z)int [1:4, 1:2] 1 2 3 4 5 6 7 8> str(r)int [1:2] 2 6bukti bhw r adalah vektorHal ini harus diperhatikan dlm pemrogramanAgar tidak terjadi reduksi dimensi, gunakan argumen drop> r r[,1] [,2][1,] 2 6> dim(r)[1] 1 2r tetap mrp matriksVektor bisa dijadikan matriks dengan perintah as.matrix> u[1] 1 2 3> v attributes(u)NULL> attributes(v)$dim[1] 3 1Memberi nilai kepada submatriks> y[,1] [,2][1,] 1 4[2,] 2 5[3,] 3 6> y[c(1,3),] y[,1] [,2][1,] 1 8[2,] 2 5[3,] 1 12> x y y[,1] [,2][1,] 4 2[2,] 5 3> x[2:3,2:3] x[,1] [,2] [,3][1,] NA NA NA[2,] NA 4 2[3,] NA 5 3> y[,1] [,2][1,] 1 4[2,] 2 5[3,] 3 6> y[-2,][,1] [,2][1,] 1 4[2,] 3 6buang baris ke-2- Menyaring (Filtering) dalam Matriks> x xx[1,] 1 2[2,] 2 3[3,] 3 4> x[x[,2] >= 3,]x[1,] 2 3[2,] 3 4Prosesnya> j = 3> j[1] FALSE TRUE TRUELalu gunakan utk menyaring> x[j,]x[1,] 2 3[2,] 3 4> x[x[,2] >= 3,]x[1,] 2 3[2,] 3 4Atau bisa langsung> z x[z %% 2 == 1,] [,1] [,2][1,] 1 2[2,] 3 4Contoh lain> m m [,1] [,2][1,] 1 4[2,] 2 5[3,] 3 6> m[m[,1] > 1 & m[,2] > 5,][1] 3 6Mengapa begini?Menambah atau Menghapus Baris dan Kolom Matriks> x[1] 12 5 13 16 8> x x[1] 12 5 13 16 8 20> x x[1] 12 5 13 20 16 8 20> x x[1] 12 16 8 20Mengubah dimensi vektor atau matriksPerintah cbindUntuk mengikat / menggandengkan vektor-vektor dalam kolom per kolom menjadi matriks> vektor1 vektor2 vektor3 cbind(vektor1,vektor2,vektor3) vektor1 vektor2 vektor3[1,] 1 10 100[2,] 2 20 200[3,] 3 30 300[4,] 4 40 400> hasil class(hasil)[1] "matrix"Untuk mengubah dimensi dari matriks bisa digunakan rbind() dan cbind(). rbind = row bindcbind = column bindtambahkan baristambahkan kolom> satu[1] 1 1 1 1> z[,1] [,2] [,3][1,] 1 1 1[2,] 2 1 0[3,] 3 0 1[4,] 4 0 0> z z[1,]1 1 1 1[2,]1 2 1 0[3,]1 3 0 1[4,]1 4 0 0buat matriks baru dengan menggabungkan kolom berisi angka 1 dengan kolom-kolom matriks zCara seperti ini tidak dianjurkan utk dipakai dalam perulangan (loop), krn program akan menjadi lambat.Menghapus baris atau kolom dgn penugasan kembali (reassignment)> m m[,1] [,2][1,] 1 4[2,] 2 5[3,] 3 6> m m[,1] [,2][1,] 1 4[2,] 3 6Perbedaan Vektor dan Matriks (lebih lanjut)Matriks adalah juga vektor, tetapi mempunyai dua tambahan atribut, yakni banyaknya baris dan banyaknya kolom.> z z[,1] [,2][1,] 1 5[2,] 2 6[3,] 3 7[4,] 4 8Karena z juga merupakan vektor, maka kita bisa meminta info tentang length-nya:> length(z)[1] 8Akan tetapi sebagai matrix, z punya kelebihan dibanding vektor> class(z)[1] "matrix"> attributes(z)$dim[1] 4 2info ttg banyak baris dan kolomatau langsung menggunakan fungsi (perintah) dim> dim(z)[1] 4 2atau info ttg banyak baris dan kolom bisa secara sendiri-sendiri diperoleh dgn perintah nrow dan ncol> nrow(z)[1] 4> ncol(z)[1] 2Memberi Nama kepada Baris dan Kolom Matriks> z[,1] [,2][1,] 1 3[2,] 2 4> colnames(z)NULL> colnames(z) za b[1,] 1 3[2,] 2 4> colnames(z)[1] "a" "b"> z[,"a"][1] 1 2memberi nama kolommerujuk suatu kolomPerintah dimUntuk mengetahui dimensi dari obyek> dim(hasil)[1] 4 3artinya 4 baris dan 3 kolomPerintah nrowUntuk mengetahui banyaknya baris dari obyekPerintah ncolUntuk mengetahui banyaknya kolom dari obyekPerintah lengthUntuk mengetahui banyaknya unsur dari obyek> nrow(hasil)[1] 4> ncol(hasil)[1] 3> length(hasil)[1] 12Array Berdimensi TinggiDalam kontek statistika, baris-baris dari matriks adalah pengamatan, misal orang, dan kolom-kolom adalah variabel, seperti berat badan dan tekanan darah. Maka matriks berupa struktur data berdimensi dua. Misalkan kita mengukur variabel-variabel tsb pada waktu yg berbeda, sehingga setiap angka data kita adalah utk tiap orang tiap variabel tiap waktu. Oleh karena itu waktu menjadi dimensi ketiga. Data tsb dalam R disebut array.Cara yang lebih umum adalah menyimpan dalam array yang mempunyai indeks banyak> a a, , 1 [,1] [,2] [,3] [,4][1,] 1 4 7 10[2,] 2 5 8 11[3,] 3 6 9 12

, , 2 [,1] [,2] [,3] [,4][1,] 13 16 19 22[2,] 14 17 20 23[3,] 15 18 21 2413 16 19 2214 17 20 2315 18 21 241 4 7 102 5 8 113 6 9 121 231 2 3 4 12> firsttest[,1] [,2][1,] 46 30[2,] 21 25[3,] 50 50> secondtest[,1] [,2][1,] 46 43[2,] 41 35[3,] 50 50> tests attributes(tests)$dim[1] 3 2 2> tests[3,2,1][1] 48> tests, , 1[,1] [,2][1,] 46 30[2,] 21 25[3,] 50 48, , 2[,1] [,2][1,] 46 43[2,] 41 35[3,] 50 49Seperti halnya kita membuat array berdimensi 3 dgn menggabungkan dua matriks, maka kita juga bisa buat array berdimensi 4 dgn menggabungkan dua atau lebih array berdimensi 3. ListList adalah struktur data yang bisa berisi lebih dari satu jenis data (numerik, karakter dll) dan lebih dari satu struktur data (vektor dll)

> x x[[1]][1] 1[[2]][1] "a"[[3]][1] TRUE[[4]][1] 1+4i> # Contoh list berisi 4 komponen -> # string (karakter), vektor numerik, matriks, dan vektor karakter> x1 x2 x3 x4 mylist mylist$judul[1] "List buatanku"

$vektor[1] 25 26 18 39

$matrik [,1] [,2][1,] 1 6[2,] 2 7[3,] 3 8[4,] 4 9[5,] 5 10

$vektorstring[1] "satu" "dua" "tiga"Kita bisa merujuk unsur dari suatu list dengan nomor komponennya atau nama komponennya di dalam doble kurung siku.> mylist$vektor[1] 25 26 18 39

> mylist[[2]][1] 25 26 18 39

> mylist[["vektor"]][1] 25 26 18 39samaMengambil banyak komponen dari list.> x x[c(1, 3)]$foo[1] 1 2 3 4$baz[1] "hello"Operator [[ dapat digunakan dengan indeks/subskrip hasil pembuatan variabel baru (computed variable).> x x$foo[1] 1 2 3 4

$bar[1] 0.6

$baz[1] "hello"

> name x[[name]] ## computed index for `foo'[1] 1 2 3 4Operator $ hanya dapat digunakan nama indeks asalnya saja.> x x$foo[1] 1 2 3 4

$bar[1] 0.6

$baz[1] "hello"

> name x$name ## komponen `name' tidak ada!NULL> x$foo[1] 1 2 3 4Mengambil unsur dari komponen list.> x x$a$a[[1]][1] 10

$a[[2]][1] 12

$a[[3]][1] 14

$b[1] 3.14 2.81> x[[c(1, 3)]][1] 14> x[[1]][[3]][1] 14> x$a[[3]][1] 14> x[[c(2, 1)]][1] 3.14Data FrameData frame digunakan utk menyimpan data tabel (persegi).Merupakan bentuk khusus dari list, dimana setiap komponennya punya jumlah unsur yang samaSetiap komponen dari data frame bisa dianggap sebagai kolom, dan panjang (length) dari setiap komponen tsb bisa dianggap sbg banyaknya baris.Tidak seperti matriks, data frame dapat berisi komponen-komponen berbeda jenis.Data frame adalah struktur data yang paling banyak dipakai dalam R. Gunakan fungsi data.frame() untuk membuatnya.> tim menang seri kalah ILS ILS tim menang seri kalah1 Persib 0 1 12 Arema 1 0 13 Persipura 1 1 04 SFC 0 0 25 Persija 0 1 0Cara untuk mengakses unsur-unsurnya

> ILS$menang[1] 0 1 1 0 0> ILS$tim=="Persib"[1] TRUE FALSE FALSE FALSE FALSE> ILS$kalah[ILS$tim=="Persib"][1] 1

Jenis data logikaMenggabungkan Data FrameDua data frame dapat digabungkan berdasarkan variabel kunci. Variabel kunci tsb dimiliki oleh kedua data frame tsb.> x1 y1 d1 d1 mhs asal1 Jajang Jabar2 Jamhur Jakarta3 Joni Jakarta4 Jesicca Jambi> z2 x2 d2 d2 umur mhs1 10 Jamhur2 7 Lili3 12 Jajang> d d mhs asal umur1 Jajang Jabar 122 Jamhur Jakarta 10Variabel kunci yang ada di d1 dan d2 adalah mhsKonversi Struktur DataKonversi dari satu struktur data ke struktur data lainnya dapat dilakukan dengan mudah sbb:> as.data.frame(M)> as.vector(A)Jika tidak tahu apa struktur data dari suatu obyek, maka dapat diperiksa sbb:> is.data.frame(M)> is.vector(A)Atau dapat ditampilkan melalui perintah class sbb:> class(M)Nilai NA dan NULLNA untuk data hilang (ada tapi tidak diketahui)NULL untuk data yang tidak adaPenggunaan NADalam banyak rumus statistika, kita harus mengabaikan data hilang.> x x[1] 88 NA 12 168 13> mean(x)[1] NA> mean(x,na.rm=TRUE)[1] 70.25> x mean(x)[1] 70.25