Anda di halaman 1dari 51

ALGORITMA &

PEMROGRAMAN
Abdul Kudus, SSi., MSi., PhD.
e-mail: 1) akudus69@yahoo.com
2) kudus@unisba.ac.id
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

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

erintah 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

engakses elemen dari suatu vektor menggunakan []

gabung[18]
] 7

ta bisa mengakses lebih dari satu elemen

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

ntuk mengakses elemen-elemen yg berurutan gunakan :

gabung[2:5]
] 6 7 8 9

ntuk mengecualikan bisa menggunakan -

gabung[-1]
1] 6 7 8
3] 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

erintah all() dan any()


Perintah any(): apakah ada unsur yang TRUE dari isi
Perintah
all(): apakah semua unsur dari vektor tsb
vektor tsb.
adalah TRUE.
Misalnya ketika memproses perintah
> x <- 1:5
> any(x > 8)
> any(x >
Maka pertama-tama R memproses
3)
x > 8, yang hasilnya
[1] TRUE
(FALSE,FALSE,FALSE,TRUE,TRUE)
> any(x >
33)
Kemudian dikenakan perintah any, yang
[1] FALSE
memeriksa apakah ada unsur yang
> all(x >
TRUE.
33)
Begitu juga ketika dikenakan perintah all.
[1] FALSE
> all(x > 0)
[1] TRUE

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"

mberi Label (Nama) kepada Unsur-unsur Vektor

Merujuk unsur dengan labelnya


> x <- c(1,2,4)
> names(x)
> x <- c(1,2,4)
NULL
> names(x) <> names(x) <c("a","b","ab")
c("a","b","ab")
> x["b"]
> names(x)
b
[1] "a" "b" "ab"
2
>x
a b ab
124
Buang label yg terlanjur diberikan
> names(x) <- NULL
>x
[1] 1 2 4

Matriks dan Array

Membuat Matriks
Salah satu cara membuat matriks adalah dengan
perintah matrix().
> y <> y[,2]
matrix(c(1,2,3,4),nrow=2,ncol=
[1] 3 4
2)
diisi kolom per kolom
>y
[,1] [,2]
[1,] 1lain
3 membuatnya adalah menyatakan unsur secara
Cara
[2,] 2 4
sendiri-sendiri
> y <>y
matrix(nrow=2,ncol=2)
[,1] [,2]
> y[1,1] <- 1
[1,] 1 3
> y[2,1] <- 2
[2,] 2 4
> y[1,2] <- 3
> 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

enghindari 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
78
> str(r)

ar tidak terjadi reduksi dimensi, gunakan argumen drop

> r <- z[2,,


drop=FALSE]
>r
[,1] [,2]
[1,] 2 6
r tetap mrp matriks
> dim(r)
[1] 1 2
ktor 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


Prosesnya
> x <> j <- x[,2] >= 3
matrix(c(1:3,2:4),ncol=2)
>j
>x
[1] FALSE TRUE
x
TRUE
[1,] 1 2
Lalu gunakan utk menyarin
[2,] 2 3
> x[j,]
[3,] 3 4
x
> x[x[,2] >= 3,]
[1,] 2 3
x
[2,] 3 4
[1,] 2 3
[2,] 3 4
Atau bisa langsung
> x[x[,2] >= 3,]
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,]Mengapa begini?

ambah 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 <menggabungkan kolom berisi
cbind(satu,z)
angka 1 dengan kolom-kolom
>z
matriks z
Cara seperti ini tidak
[1,]1 1 1 1
dianjurkan utk dipakai dalam
[2,]1 2 1 0
perulangan (loop), krn program
[3,]1 3 0 1

ghapus baris atau kolom dgn penugasan kembali (reassignm


> 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

bedaan 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

n tetapi sebagai matrix, z punya kelebihan dibanding vektor


> class(z)
[1] "matrix"
> attributes(z)
$dim
[1] 4 2

info ttg banyak baris dan kolom

au 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

> 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)

List
List adalah struktur data yang bisa berisi lebih dari
satu jenis data (numerik, karakter dll) dan lebih dari
satu
data "a",
(vektor
dll) 1 + 4i)
> x struktur
<- list(1,
TRUE,
> 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

ata 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
komponen-komponen 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

A untuk data hilang (ada tapi tidak diketahui)


ULL untuk data yang tidak ada

Penggunaan NA
m banyak rumus statistika, kita harus mengabaikan data hil
> 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

Anda mungkin juga menyukai