Membuat sekumpulan mekanisme dasar yang dijalankan secara simultan. Syntax yang digunakan untuk membuat fungsi sendiri adalah:

namafungsi <- function (argumen) isifungsi

isifungsi merupakan satu objek data. Jika membutuhkan beberapa baris dapat dikelompokan dengan {} dan diakhiri dengan satu objek data.

Berikut terdapat 4 contoh fungsi yang memiliki algoritma sama, hanya berbeda pada argumen dan return-nya.

Contoh : Fungsi 1

angka_acak1=function(n,pw)  #fungsi dengan argumen n dan pw
  { x=runif(n) #membangkitkan x=bilangan acak seragam sebanyak n
  y=runif(n) #membangkitkan y=bilangan acak seragam sebanyak n
  z=(x+y)^pw 
  return(z) } 
set.seed(398); angka_acak1(10,2) #hasil z dengan n=10 dan pw=2
##  [1] 0.3623456 1.3563532 3.0831071 0.5627749 1.2262964 3.3324674 0.5071771
##  [8] 1.1015954 0.2789811 2.3933154

Contoh : Fungsi 2

angka_acak2=function(n,pw) #fungsi dengan argumen n dan pw
  { x=runif(n) #membangkitkan x=bilangan acak seragam sebanyak n
  y=runif(n) #membangkitkan y=bilangan acak seragam sebanyak n
  z=(x+y)^pw 
  return(list(x=x,y=y,z=z)) } #mengeluarkan output x,y,z dalam bentuk list
set.seed(398); angka_acak2(10,2) #output dari fungsi dengan n=10 dan pw=2
## $x
##  [1] 0.09851915 0.94990849 0.93558434 0.37891432 0.15343932 0.97622493
##  [7] 0.64285748 0.58224973 0.40302429 0.66346616
## 
## $y
##  [1] 0.50343236 0.21471729 0.82029352 0.37126894 0.95394336 0.84927977
##  [7] 0.06930619 0.46731942 0.12516230 0.88356824
## 
## $z
##  [1] 0.3623456 1.3563532 3.0831071 0.5627749 1.2262964 3.3324674 0.5071771
##  [8] 1.1015954 0.2789811 2.3933154

Contoh : Fungsi 3

angka_acak3=function(n=10,pw=2) #fungsi dengan argumen yang memiliki initial value n=10 dan pw=2
  { x=runif(n) #membangkitkan x=bilangan acak seragam sebanyak n
  y=runif(n) #membangkitkan y=bilangan acak seragam sebanyak n
  z=(x+y)^pw 
  return(z) } 
set.seed(398);angka_acak3() #mengeluarkan output dari z
##  [1] 0.3623456 1.3563532 3.0831071 0.5627749 1.2262964 3.3324674 0.5071771
##  [8] 1.1015954 0.2789811 2.3933154

Contoh : Fungsi 4

angka_acak4=function() #fungsi tanpa argumen, semua yang dijalankan merupakan 
  { x=runif(n) 
  y=runif(n) 
  z=(x+y)^pw 
  return(z) } 
n <- 5; pw <- 3 #mendefinisikan n dan pw
set.seed(398);angka_acak4()
## [1] 1.2414098 4.0406935 3.4968169 0.4780991 0.5451492

Fungsi Median

Berikut fungsi untuk mencari median dari suatu vektor:

med <- function(vect) { #fungsi dengan argumen "vect"
  n <- length(vect) #panjang dari vektor
  vects <- sort(vect) #mengurutkan vektor dengan fungsi sort
  if(n%%2 == 1) {m <- vects[(n+1)/2]} #jika banyak vektor ganjil, maka m=vects[(n+1)/2]}
  else {m <- (vects[n/2]+vects[(n/2)+1])/2} #jika tidak terpenuhi, maka m =(vects[n/2]+vects[(n/2)+1])/2}
  return(m) } #hasil dari m
x1 <- c(3,9,8,1,2,8) #vektor x1

Sehingga, hasil median dari x1 menggunakan fungsi yang telah dibuat adalah:

med(x1)
## [1] 5.5

Fungsi Modus

Berikut fungsi untuk mencari modus dari suatu vektor:

modus <- function(vect) { #fungsi dengan argumen "vect"
  v <- unique(vect) #vektor unique (tanpa berulang)
  f <- NULL 
  for(i in v) #melakukan looping sepanjang v
    { byk <- sum(vect==i) 
    f <- c(f,byk) } 
  fmax <- max(f) #mencari f maksimum
  vf <- cbind(v,f) #membuat matriks v dan f yang berisi 2 kolom
  mode <- vf[f==fmax,] #yang menjadi modus adalah vektor dari matriks tsb yang barisnya memiliki frekuensi paling tinggi
  return(mode) } #hasil dari mode
modus(x1) 
## v f 
## 8 2

Terdapat 2 modus yaitu 3 dan 7 dengan masing-masing frekuensi sebanyak 2.

Fungsi Menduga Parameter Regresi

Berikut fungsi untuk menduga parameter pada regresi berganda:

p.est<-function(A){ #yang diinput harus matriks
  if(!is.matrix(A)) 
    stop("input must be on matrix") #jika bukan matriks, maka akan error
  x1<-A[,-1] #matriks A dari kolom kedua sampai terakhir
  y <-A[,1] #matriks A  kolom pertama
  one<-rep(1,nrow(A)) #membuat vektor 1 dipaling kiri matriks
  x <-cbind(one,x1) 
  colnames(x)<-paste("x",1:ncol(x),sep="") #membuat judul kolom x1,x2, sampai banyaknya x
  b.est<-as.vector(solve(t(x) %*% x) %*% (t(x) %*% y)) #penduga parameter b 
  names(b.est)<-paste("b",0:(length(b.est)-1),sep="") #memberi nama b0,b1, dan seterusnya
  fitted.value<-as.vector(x%*%b.est) #dugaan atau prediksi dengan x dikali b dugaan
  error<-as.vector(y-fitted.value)  #nilai error
  names(fitted.value)<-names(error)<-1:nrow(A)
  list(beta.est=b.est,fit.val=fitted.value,error=error) } #membuat list

Berikut contoh data yang digunakan:

Pendapatan<-c(3.5,3.2,3.0,2.9,4.0,2.5,2.3) 
Biaya.Iklan<-c(3.1,3.4,3.0,3.2,3.9,2.8,2.2) 
Jumlah.Warung<-c(30,25,20,30,40,25,30) 
X<-cbind(Pendapatan,Biaya.Iklan,Jumlah.Warung) #menyusun data tersebut dalam matriks
p.est(X) #output dari fungsi p.est pada data X
## $beta.est
##          b0          b1          b2 
## -0.21381852  0.89843390  0.01745279 
## 
## $fit.val
##        1        2        3        4        5        6        7 
## 3.094910 3.277176 2.830539 3.184754 3.988185 2.738116 2.286320 
## 
## $error
##           1           2           3           4           5           6 
##  0.40508982 -0.07717642  0.16946108 -0.28475357  0.01181483 -0.23811608 
##           7 
##  0.01368033

Berikut hasil regresi menggunakan fungsi default R:

model<-lm(Pendapatan~Biaya.Iklan+Jumlah.Warung) #melihat hasil regresi dengan fungsi default R (lm)
model
## 
## Call:
## lm(formula = Pendapatan ~ Biaya.Iklan + Jumlah.Warung)
## 
## Coefficients:
##   (Intercept)    Biaya.Iklan  Jumlah.Warung  
##      -0.21382        0.89843        0.01745
model$coefficients #memeriksa koefisien dari model
##   (Intercept)   Biaya.Iklan Jumlah.Warung 
##   -0.21381852    0.89843390    0.01745279
model$fitted.values #melihat prediksi
##        1        2        3        4        5        6        7 
## 3.094910 3.277176 2.830539 3.184754 3.988185 2.738116 2.286320
model$residuals #melihat residual atau errornya
##           1           2           3           4           5           6 
##  0.40508982 -0.07717642  0.16946108 -0.28475357  0.01181483 -0.23811608 
##           7 
##  0.01368033