Algoritme dan Pemrograman dengan R minggu ke

Download Report

Transcript Algoritme dan Pemrograman dengan R minggu ke

ALGORITME & PEMROGRAMAN
Abdul Kudus, SSi., MSi., PhD.
Senin, 6.30 – 9.00
Rabu, 12.00 – 14.00
STRUKTUR PEMROGRAMAN DALAM R
INSTRUKSI PERULANGAN (LOOP)
Instruksi perulangan adalah instruksi yang dapat mengulang
pelaksanaan sederetan instruksi-instruksi lainnya berulangulang sesuai persyaratan yang ditetapkan.
Struktur instruksi perulangan pada dasarnya terdiri atas:
• Syarat perulangan: suatu syarat yang harus dipenuhi agar
perulangan dapat terjadi.
• Bagian perulangan: deretan instruksi yang akan diulang-ulang
pengerjaannya.
• Pencacah (counter) perulangan: suatu variabel yang nilainya
harus berubah agar dapat terjadi dan pada akhirnya membatasi
banyaknya perulangan yang dapat dikerjakan.
Ada 3 macam bentuk instruksi perulangan yang biasa ditemukan
dalam program, yaitu for, while dan repeat.
1. Perulangan for
Bentuk umum
awal:akhir
for (variabel in vektornilai)
{
instruksi_instruksi
}
Maknanya adalah ulangi instruksi-instruksi tersebut berdasarkan
variabel perulangan mulai nilai awal hingga nilai akhir.
Contoh:
for (i in 1:10)
{
cat("Halo...","\n")
}
x <- c(4,1,5,7,2,3)
n <- length(x)
akumulasi <- 0
for(i in 1:n)
{
akumulasi <- akumulasi + x[i]
}
rata <- akumulasi/n
for(cacah in 10:1)
{
cat(cacah,"\n")
}
cat("lariiii...","\n")
Loop Menggunakan for()
jika banyaknya pengulangan diketahui
Perintah R
for (i in nilai_nilai_i)
{
Perintah-perintah R
}
Contoh
for (i in 1:10)
{
print(i)
}
for (i in c(3,2,9,6))
{
print(i^2)
}
angkutan <- c("mobil", "bis", "kereta","sepeda")
for (kendaraan in angkutan)
{
print(kendaraan)
}
Fibo <- rep(0,times=12)
Fibo[1] <- 1
Fibo[2] <- 1
for (i in 3:12)
{
Fibo[i] <- Fibo[i-2] + Fibo[i-1]
}
Perulangan while
while (syarat)
{
Instruksi_instruksi
}
Maknanya adalah ulangi instruksi-instruksi selama syarat yang
diberikan masih terpenuhi
Perhatikan:
1. Harus ada instruksi yang berkaitan dengan syarat sebelum masuk
ke while sehingga syarat ini terpenuhi dan pengulangan bisa
dilaksanakan. Bila tidak, maka instruksi while tidak bisa dijalankan.
2. Ada satu instruksi di antara instruksi-instruksi yang diulang agar
pada satu saat syarat perulangan tidak terpenuhi, sehingga
perulang bisa berhenti.
Contoh: Algoritma berikut menggunakan while untuk
menampilkan angka 1 hingga 10 secara berurutan.
angka <- 1
while(angka < 11)
{
cat("angka= ",angka,"\n")
angka <- angka + 1
}
kondisi awal
instruksi yg bisa
mengubah syarat
sehingga tidak
terpenuhi pd saat
angka  11
Loop Menggunakan while()
Banyaknya pengulangan tidak diketahui Diulang selagi masih terpenuhinya syarat
Perintah R
while (syarat)
{
Perintah-perintah R
}
Contoh:
Hitung jumlah dari bilangan 1,2,3,… sampai jumlahnya > 1000
n <- 1
jumlah <- 0
while (jumlah <= 1000)
{
jumlah <- jumlah + n
n <- n + 1
}
Misal kita ingin membuat barisan bilangan Fibonacci yang kurang
dari 300. Kita tidak tahu berapa banyaknya bilangan-bilangan ini.
Oleh karena itu kita tak tahu bagaimana menghentikan loop
menggunakan for(), tetapi loop while() bisa.
Fib1 <- 1
Fib2 <- 1
Fibo <- c(Fib1,Fib2)
while (Fib2 < 300)
{
Fibo <- c(Fibo, Fib2)
Fib2.lama <- Fib2
Fib2 <- Fib1 + Fib2
Fib1 <- Fib2.lama
}
Perulangan repeat dan break
repeat
{
Instruksi_instruksi
if(syarat) break
}
Makna: ulangi pelaksanaan instruksi_instruksi hingga syarat terpenuhi.
Perhatikan:
1. Instruksi-instruksi akan diulang hanya apabila syarat TIDAK
terpenuhi, dan ketika syarat terpenuhi maka perulangan berhenti.
2. Instruksi-instruksi dikerjakan terlebih dahulu sebelum syarat
diperiksa.
3. Harus ada satu instruksi yg mendahului repeat agar syarat tidak
terpenuhi sehingga perulangan bisa berlangsung.
4. Harus ada instruksi yang menyebabkan syarat terpenuhi dan
perulangan berhenti.
Contoh: Algoritma berikut menampilkan “Halo…” sebanyak 5 kali,
dengan menggunakan repeat.
cacah <- 1
Contoh: Menggunakan
repeat
repeat untuk
{
menghitung jumlah
cat("Halo...","\n")
x1+x2+x3+…+xn dan
cacah <- cacah + 1
rata-ratanya
if(cacah > 5) break
x <- c(4,1,5,7,2,3)
}
n <- length(x)
akumulasi <- 0
i <- 1
repeat
{
akumulasi <- akumulasi + x[i]
i <- i + 1
if (i > n) break
}
rata <- akumulasi/n
Break juga bisa dipakai di dalam pengulangan while selain di
dalam pengulangan repeat
> i <- 1
> while (i <= 10)
+ {
+
i <- i+4
+ }
> i
[1] 13
> i <- 1
> while(TRUE)
+ { # pengulangan yg sama
+
i <- i+4
+
if (i > 10) break
+ }
> i
[1] 13
> i <- 1
> repeat
+ { # pengulangan yg sama juga
+
i <- i+4
+
if (i > 10) break
+ }
> i
[1] 13
break digunakan utk
keluar dr
pengulangan (loop)
break juga dpt
digunakan dlm
pengulangan for
Perintah next akan melewatkan perintah di bawahnya dan langsung
melompat pada iterasi berikutnya.
> x <- c(3,1,5,NA,6,9,NA,2) Ket: is.na(x) adalah
TRUE jika x merupakan
> jml <- 0
data missing (NA)
> for (unsur in x)
+ {
+
if (is.na(unsur)) next
+
jml <- jml + unsur
+ }
> jml
[1] 26
Pengulangan terhadap himpunan bukan vektor
Perintah get() akan menjadikan karakter/string dr suatu obyek
sebagai input, dan akan mengeluarkan obyeknya sebagai outputnya.
> P <- matrix(c(2,4,1,3),2,2)
> Q <- matrix(c(1,4,2,3),2,2)
> for (M in c("P","Q"))
+ {
+
matrikku <- get(M)
+
print(det(matrikku))
+ }
[1] 2
[1] -5
INSTRUKSI PEMILIHAN dengan Perintah if()
Instruksi pemilihan adalah instruksi yang dipakai untuk memilih
satu aksi dari beberapa kemungkinan aksi berdasarkan suatu
persyaratan.
Tidak
Bentuk 1 kasus
if (syarat)
{
aksi
}
Ya
Apabila syarat dipenuhi, maka “aksi” dijalankan.
Contoh: Jika x lebih besar dr 100, maka nilainya akan ditambah 5
if (x >100)
{
x <- x + 5
}
Bentuk 2 kasus
if (syarat)
{
aksi_1
} else
{
aksi_2
}
Apabila syarat dipenuhi, maka “aksi_1” dijalankan. Tetapi jika tidak
terpenuhi maka “aksi_2” yg dijalankan.
Contoh: Jika x lebih besar dr 0, maka ditampilkan “bilangan ini
positif”. Selain itu akan ditampilkan “bilangan ini negatif”.
if (x >0)
{
cat("bilangan ini positif","\n")
} else
{
cat("bilangan ini negatif","\n")
}
Bentuk Bersusun (Lebih dari 1 Syarat)
if (syarat_1)
{
Aksi_1
} else
{
if (syarat_2)
{
Aksi_2
} else
{
Aksi_3
}
}
Contoh:
Penentuan nilai akhir:
A , jika skor  80

nilai  B , jika 60  skor  80
C , jika skor  60

nilai <- function(skor)
{
if (skor >= 80)
{
nilai <- "A"
} else
{
if (skor >= 60)
{
nilai <- "B"
} else
{
nilai <- "C"
}
}
return(nilai)
}
Terjemahkan ke dalam R !
Operator Aritmetik dan Boolean (Logika) serta Nilainya
> x <- c(TRUE,FALSE,TRUE)
> y <- c(TRUE,TRUE,FALSE)
> x & y
[1] TRUE FALSE FALSE
> x[1] && y[1]
[1] TRUE
> x && y # hanya memeriksa unsur pertama
[1] TRUE
> if (x[1] && y[1]) print("keduanya TRUE")
[1] "keduanya TRUE"
> if (x && y) print("keduanya TRUE")
[1] "keduanya TRUE"
> if (x & y) print("keduanya TRUE")
[1] "keduanya TRUE"
Warning message:
In if (x & y) print("keduanya TRUE") :
the condition has length > 1 and only the first
element will be used
>1<2
[1] TRUE
> (1 < 2) * (3 < 4)
[1] 1
> (1 < 2) * (3 < 4) * (5 < 1)
[1] 0
> (1 < 2) == TRUE
[1] TRUE
> (1 < 2) == 1
[1] TRUE
Membuat Fungsi R Sendiri
• Kita bisa membuat fungsi baru untuk tujuan tertentu, misalnya
untuk menghitung rumus tertentu yang belum ada dalam
fungsi bawaan dari R.
• Fungsi mempunyai input dan output
• Semua variabel yang dibuat di dalam suatu fungsi hanya
dikenal secara internal untuk fungsi itu saja.
Bentuk Umum Fungsi dalam R
nama_fungsi <- function(input)
{
badan_dari_fungsi (perintah-perintah)
return(output)
}
Contoh: Berikut ini adalah fungsi untuk menghitung pangkat tiga
dari suatu input bilangan.
nama_fungsi
>
+
+
+
+
kubik <- function(x)
{
y <- x^3
return(y)
}
perintah R
output
Jalankan fungsi yang baru tersebut.
> kubik(2)
[1] 8
input
Atau inputnya berupa vektor.
> dataku <- 1:5
> kubik(dataku)
[1]
1
8 27 64 125
> kubik(dataku/2)
[1] 0.125 1.000 3.375
8.000 15.625
Bisa juga dipanggil secara rekursif.
> kubik(kubik(dataku))
[1]
1
512
19683
262144 1953125
Suatu fungsi bisa punya lebih dari satu input.
>
+
+
+
+
bagi <- function(x,y)
{
z <- x/y
return(z)
}
Contoh:
> bagi(15,3)
[1] 5
Nilai Default bagi Input (Argumen) suatu Fungsi
Ingat lagi contoh fungsi read.table utk membaca eksternal data.
c:/ujian.txt
"Exam 1" "Exam 2" Quiz
input header=TRUE menunjukkan
2.0 3.3 4.0
bhw file data mempunyai baris
3.3 2.0 3.7
judul, sehingga datanya mulai baris
4.0 4.0 4.0
kedua.
2.3 0.0 3.3
2.3 1.0 3.3
3.3 3.7 4.0
> dataujian <- read.table("c:/ujian.txt",header=TRUE)
> head(dataujian)
Exam.1 Exam.2 Quiz
1
2.0
3.3 4.0
2
3.3
2.0 3.7
3
4.0
4.0 4.0
4
2.3
0.0 3.3
5
2.3
1.0 3.3
6
3.3
3.7 4.0
lihat input (argumen) lengkap dari read.table
> read.table
function (file, header = FALSE, sep = "", quote = "\"'", dec = ".",
row.names, col.names, as.is = !stringsAsFactors, na.strings = "NA",
colClasses = NA, nrows = -1, skip = 0, check.names = TRUE,
fill = !blank.lines.skip, strip.white = FALSE, blank.lines.skip = TRUE,
comment.char = "#", allowEscapes = FALSE, flush = FALSE,
stringsAsFactors = default.stringsAsFactors(), fileEncoding = "",
encoding = "unknown")
{
if (is.character(file)) {
file <- if (nzchar(fileEncoding))
file(file, "rt", encoding = fileEncoding)
else file(file, "rt")
on.exit(close(file))
. . . dan seterusnya
Output dari suatu Fungsi
oddcount <- function(x)
{
k <- 0
for (n in x)
{
if (n %% 2 == 1) k <- k+1
}
return(k)
}
oddcount <- function(x)
{
k <- 0
for (n in x)
{
if (n %% 2 == 1) k <- k+1
}
k
}
Output adalah:
-obyek yg di-return
-obyek pada perintah terakhir