repo  <- gsub  ( "\\\\",  "/",  readClipboard ()  ); repo
## [1] "repeat{"               "  i<-i+1"              "  print(kuadrat[i])"  
## [4] "  if (i==8) {break()}" "}"

Note :

Jika menggunakan package yang tidak diminta atau tidak dipelajari. Maka jawaban dianggap tidak sesuai

Numeric

#Pangkat 10
1.2e-2
## [1] 0.012
#Complex
1.2e-2+2i
## [1] 0.012+2i
sqrt(2i)
## [1] 1+1i
sqrt(2)
## [1] 1.414214

Array

arr <- array(iris)
View(arr)

Factor

faq <- factor(c(1, 2, 3, 4, 5)); str(faq)
##  Factor w/ 5 levels "1","2","3","4",..: 1 2 3 4 5

Data Frame

vec <- c(1:10)
df <- data.frame(x=rep(c('A', 'B', 'C', 'D', 'E'), 2), vec); df
##    x vec
## 1  A   1
## 2  B   2
## 3  C   3
## 4  D   4
## 5  E   5
## 6  A   6
## 7  B   7
## 8  C   8
## 9  D   9
## 10 E  10

Logic

If

if (kondisi) ekspresi (T) [else ekspresi (F)]

y = 0
if(y == 0) y=2^y
y
## [1] 1

Iflese

x <- ifelse(kondisi, nilai jika T, nilai jika F)

nilai jika F -> opsional

ifelse(y > 0, "positif", "negatif")
## [1] "positif"

Switch

centre <- function(x, type){
  switch(type, 
         mean = cat("\n mean :", mean(x)),
         median = cat("\n median :", median(x)),
         trimmed = cat("\n trimmed mean :", mean(x, trim = .1)))
}

dt <- c(1:9)
dt_mean <- centre(dt,"mean")
## 
##  mean : 5
dt_median <- centre(dt, "median")
## 
##  median : 5
dt_trim <- centre(dt, "trimmed")
## 
##  trimmed mean : 5

Loops

For

for(objek in sekuens) ekspresi

kuadrat<-c()
for (i in 1:10){
  kuadrat[i] <- i^2
}
kuadrat
##  [1]   1   4   9  16  25  36  49  64  81 100

While

while (condition) ekspresi

i <- length(kuadrat)
akar <- c()
while (i>0){
  akar[i] <- sqrt(kuadrat[i])
  i <- i-1
}
akar
##  [1]  1  2  3  4  5  6  7  8  9 10

Repeat

Mirip do while di c. Pasti dijalankan 1 kali walau kondisi salah

repeat eskpresi

(untuk menghentikan gunakan perintah break)

repeat{
  i<-i+1
  print(kuadrat[i])
  if (i==8) {break()}
}
## [1] 1
## [1] 4
## [1] 9
## [1] 16
## [1] 25
## [1] 36
## [1] 49
## [1] 64

Fungsi di R

Fungsi simpangan baku

data <- matrix(c(1,2,3,
                 4,5,6,
                 7,8,9), ncol = 3)
x <- data
std.dev <- function(x) sqrt(var(x)) #Jika cmn 1 perintah, tidk perlu {}
std.dev(x)
##      [,1] [,2] [,3]
## [1,]    1    1    1
## [2,]    1    1    1
## [3,]    1    1    1

Fungsi dapat diberi default input

uy <- function(x=10) x/2
uy()
## [1] 5
uy(8)
## [1] 4

Nested function

apply(objek, margin, function, …)

margin -> misal untuk setiap baris

Output Function

func1 <- function(x){
  ...
  list(hasil1, hasil2)
}
#Atau dengan return :
func2 <- function(x){
  ...
  return(list(hasil1, hasil2))
}

Calling Function

func1 <- function(arg1, arg2) arg1 - arg2
func1(10, 20)
## [1] -10
func1(arg2=20, arg1=10)
## [1] -10

Penanganan kesalahan

Jika suatu baris di dalam function ada error, maka seluruh baris setelahnya tidak akan dijalankan

try

Agar baris setelahnya masih bisa dijalankan, gunakan function “try”

function(x){
  ...
  try(log("a"))
  ...
}
## function(x){
##   ...
##   try(log("a"))
##   ...
## }
#Bisa seperti ini :
function(x){
  ...
  error <- try(log("a"))
  if(error..)
  ...
}
## function(x){
##   ...
##   error <- try(log("a"))
##   if(error..)
##   ...
## }

tryCatch

Jika ada error, kasih perintah

function(x){
  ...
  tryCatch(log(10), finally=print("Hello"))
  ...
}
## function(x){
##   ...
##   tryCatch(log(10), finally=print("Hello"))
##   ...
## }

Warning

Hanya menampilkan kesalahan

function(x){
  ...
  error <- try(log("a"))
  if(error..) warning("Ada kesalahan")
  ...
}
## function(x){
##   ...
##   error <- try(log("a"))
##   if(error..) warning("Ada kesalahan")
##   ...
## }

Stop

Menghentikan program & memberi keterangan

function(x){
  ...
  error <- try(log("a"))
  if(error..) stop("Ada kesalahan")
  ...
}
## function(x){
##   ...
##   error <- try(log("a"))
##   if(error..) stop("Ada kesalahan")
##   ...
## }

T Test Function

ttest <- function(y1, y2, test="dua-arah", alpha=0.5){
  n1 <- length(y1); n2 <- length(y2)
  s2 <- ((n1-1)*var(y1) + (n2-1)*var(y2)) / ndf
  tstat <- (mean(y1) - mean(y2)) / sqrt(s2*(1/n1 + 1/n2))
  tail.area <- 
    switch(test,
           "dua-arah" = 2 * (1-pt(abs(tstat), ndf)),
           kecil = pt(tstat,ndf),
           besar = 1-pt(tstat,ndf),
             {
               warning("uji harus 'dua-arah', 'kecil' atau 'besar'")
               NULL
             }
           )
  list(tstat=tstat, df=ndf, 
       reject=if(!is.nulll(tail.area)) tail.area < alpha, 
       tail.area = tail.area
    )
}