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.
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
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
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
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
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 x1Sehingga, hasil median dari x1 menggunakan fungsi yang telah dibuat adalah:
## [1] 5.5
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.
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 listBerikut 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
## (Intercept) Biaya.Iklan Jumlah.Warung
## -0.21381852 0.89843390 0.01745279
## 1 2 3 4 5 6 7
## 3.094910 3.277176 2.830539 3.184754 3.988185 2.738116 2.286320
## 1 2 3 4 5 6
## 0.40508982 -0.07717642 0.16946108 -0.28475357 0.01181483 -0.23811608
## 7
## 0.01368033