Algoritme dan Pemrograman dengan R ttg

Download Report

Transcript Algoritme dan Pemrograman dengan R ttg

ALGORITMA & PEMROGRAMAN
Abdul Kudus, SSi., MSi., PhD.
e-mail: 1) [email protected]
2) [email protected]
blog:
abdulkudus.staff.unisba.ac.id
R
 R adalah software ‘open-source’ untuk pemrograman statistik.
 ‘open-source’ = gratis
 R 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 R
-Perintah 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
[13] 13 14 15 16 17 18 19 20
9 10 11 12
> # "*" 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] 3
- Operasi dasar + (tambah), - (kurang), * (kali) dan / (bagi) bisa
langsung dikerjakan dalam R.
- R juga bisa mengerjakan pangkat.
> 3^4
[1] 81
Struktur Data dalam R
Vektor
Perintah c() digunakan untuk membuat vektor data.
> c(0, 7, 8)
[1] 0 7 8
Kita juga bisa menyimpannya dalam suatu obyek.
> x <- c(0, 7, 8) # x : vektor dgn 3 elemen
Untuk melihatnya kita ketik nama obyeknya
> x
[1] 0 7 8
Simbol ‘: ‘ digunakan untuk membuat barisan bilangan (baik
menaik ataupun menurun)
> bil5sampai20 <- 5:20
> 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 <- c(bil5sampai20,x)
> 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
[13] 18 19 20
9 10 11 12 13 14 15 16 17
0 7 8
Mengambil unsur dgn Rumusan Logika
which
which.min
which.max
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 > 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,FALSE,FALSE,TRUE,TRUE)
Kemudian dikenakan perintah any, yang
memeriksa apakah ada unsur yang TRUE.
Begitu juga ketika dikenakan perintah all.
Vektor Aritmetik
Mengalikan setiap elemen dari suatu vektor dengan skalar:
> x * 3
[1] 0 21 24
Tambah (+), kurang (-) dan bagi (/) juga bisa dilakukan dgn cara
yang sama
> y <- x - 5
> x ^ 3 # x dipangkatkan 3
> y ^ x # setiap unsur y dipangkatkan dengan
setiap unsur x yang bersesuaian.
Vektor Berpola
Operator ‘:’ 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 <- c("red", "yellow", "blue")
> more.colors <- c(colors, "green", "magenta", "cyan")
> # tambahkan bbrp unsur baru
> z <- c("red", "green", 1) #coba campur beda jenis
> more.colors
[1] "red“ "yellow“ "blue” "green" "magenta" "cyan"
> z
[1] "red“ "green" "1"
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
Matriks dan Array
Membuat Matriks
Salah satu cara membuat matriks adalah dengan perintah matrix().
> y <- matrix(c(1,2,3,4),nrow=2,ncol=2)
>y
[,1] [,2]
diisi kolom per kolom
[1,] 1 3
[2,] 2 4
> y[,2]
[1] 3 4
Cara lain membuatnya adalah menyatakan unsur secara sendiri-sendiri
> y <- matrix(nrow=2,ncol=2)
>y
> y[1,1] <- 1
[,1] [,2]
> y[2,1] <- 2
[1,] 1 3
> y[1,2] <- 3
[2,] 2 4
> y[2,2] <- 4
Kita bisa mengisi baris per baris
> m <- matrix(c(1,2,3,4,5,6),nrow=2,byrow=T)
> m
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
Operasi 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
Ambil kolom ke-2 dan ke-3
> z
> z[,2:3]
[,1] [,2] [,3]
[,1] [,2]
[1,] 1 1 1
[1,] 1 1
[2,] 2 1 0
[2,] 1 0
[3,] 3 0 1
[3,] 0 1
[4,] 4 0 0
[4,] 0 0
> 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 32
Menghindari Reduksi Dimensi yg Tidak Diinginkan
>z
[,1] [,2]
[1,] 1 5
[2,] 2 6
[3,] 3 7
[4,] 4 8
> r <- z[2,]
>r
[1] 2 6
z adalah matriks
r adalah vektor (terjadi reduksi dimensi)
bukti bhw r adalah vektor
Hal ini harus diperhatikan
dlm pemrograman
> 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 6
Agar tidak terjadi reduksi dimensi, gunakan argumen ‘drop’
> r <- z[2,, drop=FALSE]
>r
[,1] [,2]
[1,] 2 6
> dim(r)
[1] 1 2
r tetap mrp matriks
Vektor bisa dijadikan matriks dengan perintah as.matrix
>u
[1] 1 2 3
> v <- as.matrix(u)
> attributes(u)
NULL
> attributes(v)
$dim
[1] 3 1
Memberi nilai kepada submatriks
> y
[,1] [,2]
[1,] 1 4
[2,] 2 5
[3,] 3 6
> y[c(1,3),] <- matrix(c(1,1,8,12),nrow=2)
> y
[,1] [,2]
[1,] 1 8
[2,] 2 5
[3,] 1 12
> x <- matrix(nrow=3,ncol=3)
> y <- matrix(c(4,5,2,3),nrow=2)
> y
[,1] [,2]
[1,] 4 2
[2,] 5 3
> x[2:3,2:3] <- y
> 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 6
buang baris ke-2
- Menyaring (Filtering) dalam Matriks
> x <- matrix(c(1:3,2:4),ncol=2)
>x
x
[1,] 1 2
[2,] 2 3
[3,] 3 4
> x[x[,2] >= 3,]
x
[1,] 2 3
[2,] 3 4
Atau bisa langsung
> x[x[,2] >= 3,]
x
[1,] 2 3
[2,] 3 4
Prosesnya
> j <- x[,2] >= 3
>j
[1] FALSE TRUE TRUE
Lalu gunakan utk menyaring
> x[j,]
x
[1,] 2 3
[2,] 3 4
> z <- c(5,12,13)
> x[z %% 2 == 1,]
[,1] [,2]
[1,] 1 2
[2,] 3 4
Contoh lain
> m <- matrix(1:6,ncol=2)
>m
[,1] [,2]
[1,] 1 4
[2,] 2 5
[3,] 3 6
> m[m[,1] > 1 & m[,2] > 5,]
[1] 3 6
Mengapa begini?
Menambah atau Menghapus Baris dan Kolom Matriks
Mengubah dimensi vektor atau matriks
>x
[1] 12 5 13 16 8
> x <- c(x,20) # tambahkan unsur 20
>x
[1] 12 5 13 16 8 20
> x <- c(x[1:3],20,x[4:6]) # sisipkan 20
>x
[1] 12 5 13 20 16 8 20
> x <- x[-2:-4] # hapus unsur ke-2 sampai ke-4
>x
[1] 12 16 8 20
Perintah cbind
Untuk mengikat / menggandengkan vektor-vektor dalam kolom per
kolom menjadi matriks
> vektor1 <- c(1, 2, 3,4)
> vektor2 <- c(10,20,30,40)
> vektor3 <- c(100,200,300,400)
> cbind(vektor1,vektor2,vektor3)
vektor1 vektor2 vektor3
[1,]
1 10 100
[2,]
2 20 200
[3,]
3 30 300
[4,]
4 40 400
> hasil <- cbind(vektor1,vektor2,vektor3)
> class(hasil)
[1] "matrix"
Untuk mengubah dimensi dari matriks bisa digunakan rbind() dan
cbind().
rbind = row bind
tambahkan baris
cbind = column bind
tambahkan 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
buat matriks baru dengan
> z <- cbind(satu,z)
menggabungkan kolom berisi angka 1
>z
dengan kolom-kolom matriks z
[1,]1 1 1 1
Cara seperti ini tidak dianjurkan utk
[2,]1 2 1 0
dipakai dalam perulangan (loop), krn
[3,]1 3 0 1
program akan menjadi lambat.
[4,]1 4 0 0
Menghapus baris atau kolom dgn penugasan kembali (reassignment)
> m <- matrix(1:6,nrow=3)
>m
[,1] [,2]
[1,] 1 4
[2,] 2 5
[3,] 3 6
> m <- m[c(1,3),]
>m
[,1] [,2]
[1,] 1 4
[2,] 3 6
Perbedaan Vektor dan Matriks (lebih lanjut)
Matriks adalah juga vektor, tetapi mempunyai dua tambahan
atribut, yakni banyaknya baris dan banyaknya kolom.
> z <- matrix(1:8,nrow=4)
>z
[,1] [,2]
[1,] 1 5
[2,] 2 6
[3,] 3 7
[4,] 4 8
Karena z juga merupakan vektor, maka kita bisa meminta info
tentang length-nya:
> length(z)
[1] 8
Akan tetapi sebagai matrix, z punya kelebihan dibanding vektor
> class(z)
[1] "matrix"
> attributes(z)
$dim
[1] 4 2
info ttg banyak baris dan kolom
atau langsung menggunakan fungsi (perintah) dim
> dim(z)
[1] 4 2
atau info ttg banyak baris dan kolom bisa secara sendiri-sendiri
diperoleh dgn perintah nrow dan ncol
> nrow(z)
[1] 4
> ncol(z)
[1] 2
Memberi Nama kepada Baris dan Kolom Matriks
>z
[,1] [,2]
[1,] 1 3
[2,] 2 4
> colnames(z)
NULL
> colnames(z) <- c("a","b")
>z
ab
[1,] 1 3
[2,] 2 4
> colnames(z)
[1] "a" "b"
> z[,"a"]
[1] 1 2
memberi nama kolom
merujuk suatu kolom
Perintah dim
Untuk mengetahui dimensi dari obyek
> dim(hasil)
[1] 4 3
artinya 4 baris dan 3 kolom
Perintah nrow
Untuk mengetahui banyaknya baris dari obyek
Perintah ncol
Untuk mengetahui banyaknya kolom dari obyek
Perintah length
Untuk mengetahui banyaknya unsur dari obyek
> nrow(hasil)
[1] 4
> ncol(hasil)
[1] 3
> length(hasil)
[1] 12
Array Berdimensi Tinggi
Dalam 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 <- array(1:24, c(3, 4, 2))
> a
, , 1
[,1] [,2] [,3] [,4]
[1,]
1
4
7
10
[2,]
2
5
8
11
2
[3,]
3
6
9
12
1
, , 2
[,1] [,2] [,3] [,4]
[1,]
13
16
19
22
[2,]
14
17
20
23
[3,]
15
18
21
24
1
2
3
1
2
3
13
14
4
15
5
6
16
17
7
18
8
9
19 22
20 23
10
21 24
11
12
1
2
3
4
> 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[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 49
Seperti 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.
> tests <- array(data=c(firsttest,secondtest),dim=c(3,2,2))
> attributes(tests)
$dim
[1] 3 2 2
List
List adalah struktur data yang bisa berisi lebih dari satu jenis data
(numerik, karakter dll) dan lebih dari satu struktur data (vektor dll)
> x <- list(1, "a", TRUE, 1 + 4i)
> x
[[1]]
[1] 1
[[2]]
[1] "a"
[[3]]
[1] TRUE
[[4]]
[1] 1+4i
List juga bisa punya nama
> # Contoh list berisi 4 komponen > # string (karakter), vektor numerik, matriks, dan vektor karakter
> x1 <- "List buatanku"
> x2 <- c(25, 26, 18, 39)
> x3 <- matrix(1:10, nrow=5)
> x4 <- c("satu", "dua", "tiga")
> mylist <- list(judul=x1, vektor=x2, matrik=x3, vektorstring=x4)
> 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 39
sama
Mengambil banyak komponen dari list.
> x <- list(foo = 1:4, bar = 0.6, baz = "hello")
> 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 <- list(foo = 1:4, bar = 0.6, baz =
"hello")
> x
$foo
[1] 1 2 3 4
$bar
[1] 0.6
$baz
[1] "hello"
> name <- "foo"
> x[[name]] ## computed index for `foo'
[1] 1 2 3 4
Operator $ hanya dapat digunakan nama indeks asalnya saja.
> x <- list(foo = 1:4, bar = 0.6, baz =
"hello")
> x
$foo
[1] 1 2 3 4
$bar
[1] 0.6
$baz
[1] "hello"
> name <- "foo"
> x$name ## komponen `name' tidak ada!
NULL
> x$foo
[1] 1 2 3 4
Mengambil unsur dari komponen list.
> x <- list(a = list(10, 12, 14), b = c(3.14, 2.81))
> 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.14
Data Frame
Data frame digunakan utk menyimpan data tabel (persegi).
• Merupakan bentuk khusus dari list, dimana setiap komponennya
punya jumlah unsur yang sama
• Setiap 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 komponenkomponen berbeda jenis.
Data frame adalah struktur data yang paling banyak dipakai dalam R.
Gunakan fungsi data.frame() untuk membuatnya.
>
>
>
>
>
>
1
2
3
4
5
tim <- c("Persib","Arema","Persipura","SFC", "Persija")
menang <- c(0,1,1,0,0)
seri <- c(1,0,1,0,1)
kalah <- c(1,1,0,2,0)
ILS <- data.frame(tim,menang,seri,kalah)
ILS
tim menang seri kalah
Persib
0
1
1
Arema
1
0
1
Persipura
1
1
0
SFC
0
0
2
Persija
0
1
0
Cara 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 logika
Menggabungkan Data Frame
Dua data frame dapat digabungkan berdasarkan variabel kunci.
Variabel kunci tsb dimiliki oleh kedua data frame tsb.
> x1 <- c("Jajang", "Jamhur", "Joni", "Jesicca")
> y1 <- c("Jabar", "Jakarta", "Jakarta", "Jambi")
> d1 <- data.frame(mhs=x1, asal=y1)
> d1
mhs
asal
1 Jajang
Jabar
2 Jamhur Jakarta
3
Joni Jakarta
4 Jesicca
Jambi
> z2 <- c(10,7,12)
> x2 <- c("Jamhur", "Lili", "Jajang")
> d2 <- data.frame(umur=z2, mhs=x2)
> d2
umur
mhs
1
10 Jamhur
2
7
Lili
3
12 Jajang
Variabel kunci yang ada di d1 dan d2 adalah “mhs”
> d <- merge(d1,d2)
>d
mhs
asal umur
1 Jajang
Jabar
12
2 Jamhur Jakarta
10
Konversi Struktur Data
Konversi 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 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