Perulangan atau looping dalam bahasa R dapat dilakukan dengan beberapa cara. Selain menggunakan fungsi perulangan seperti for
, repeat
dan while
kita juga dapat menggunakan fungsi yang tergabung dalam apply family .
Fungsi yang tergabung dalam apply family ada beberapa jenis, penulis disini membahas 4 jenis saja antara lain :
1. apply()
: fungsi umum yang mengaplikasikan suatu fungsi pada kolom atau baris tertentu. Ini digunakan pada jenis data array seperti matrix atau dataframe. Output dari fungsi ini berupa sebuah vector
2. lapply()
: sama seperti fungsi apply
namun menghasilkan output berupa list.
3. sapply()
: sama dengan lapply
, namun memberikan output sebuah vector atau matriks.
4. tapply()
: huruf T stand for “tagged”, mengaplikasikan fungsi ke sebuah subset dari vector dan fungsi yang didefiniskan oleh vector yang lain, biasanya sebuah factor.
Format penulisan fungsi apply()
yaitu :
apply(X, MARGIN, FUN, ...)
dengan :
# Membuat matriks berukuran 3x3 dengan elemen matriks angka 1 sampai 9
mymatrix <- matrix(c(1:9),3,3)
mymatrix
## [,1] [,2] [,3]
## [1,] 1 4 7
## [2,] 2 5 8
## [3,] 3 6 9
## [1] 2 5 8
# Menggunakan user defined function, ex : jangkauan
jangkauan <- function(x) {
max(x)-min(x)
}
# Menghitung jangkauan (range) masing-masing kolom
apply(mymatrix, MARGIN = 2,FUN= jangkauan)
## [1] 2 2 2
Format penulisan fungsi lapply()
yaitu :
lapply(X, FUN, ...)
dengan :
# Membuat list
daftar <- list(a=c(1:7),b=exp(1:5),c=c(TRUE,FALSE,TRUE,FALSE,FALSE,TRUE))
# Membuat dataframe
df <- data.frame(v1=c(2:11),v2=c(3:12),v3=c(4:13))
class(daftar) # Cek tipe objek
daftar # Cetak list
class(df) # Cek tipe objek
df # Cetak dataframe
## [1] "list"
## $a
## [1] 1 2 3 4 5 6 7
##
## $b
## [1] 2.718282 7.389056 20.085537 54.598150 148.413159
##
## $c
## [1] TRUE FALSE TRUE FALSE FALSE TRUE
##
## [1] "data.frame"
## v1 v2 v3
## 1 2 3 4
## 2 3 4 5
## 3 4 5 6
## 4 5 6 7
## 5 6 7 8
## 6 7 8 9
## 7 8 9 10
## 8 9 10 11
## 9 10 11 12
## 10 11 12 13
## $a
## [1] 4
##
## $b
## [1] 46.64084
##
## $c
## [1] 0.5
## $v1
## [1] 65
##
## $v2
## [1] 75
##
## $v3
## [1] 85
Format penulisan fungsi sapply()
yaitu :
sapply(X, FUN, ...,simplify = TRUE,..)
dengan :
TRUE
. Jika nilainya TRUE
maka output yang dihasilkan adalah bentuk sederhana dari vector,matriks atau array. Sebaliknya, jika nilainya FALSE
maka output yang dihasilkan adalah list atau sama dengan fungsi lapply
.# Membuat list
daftar <- list(a=c(1:7),b=exp(1:5),c=c(TRUE,FALSE,TRUE,FALSE,FALSE,TRUE))
# Membuat dataframe
mobil <- mtcars
class(mobil)
## [1] "data.frame"
anggrek <- iris
class(anggrek)
## [1] "data.frame"
daftar
## $a
## [1] 1 2 3 4 5 6 7
##
## $b
## [1] 2.718282 7.389056 20.085537 54.598150 148.413159
##
## $c
## [1] TRUE FALSE TRUE FALSE FALSE TRUE
## a b c
## 4.00000 46.64084 0.50000
# Menghitung nilai rata-rata dari list dengan output sebuah list
sapply(daftar,FUN= mean, simplify = F)
## $a
## [1] 4
##
## $b
## [1] 46.64084
##
## $c
## [1] 0.5
## mpg cyl disp hp drat wt qsec vs
## Min. 10.40000 4.0000 71.1000 52.0000 2.760000 1.51300 14.50000 0.0000
## 1st Qu. 15.42500 4.0000 120.8250 96.5000 3.080000 2.58125 16.89250 0.0000
## Median 19.20000 6.0000 196.3000 123.0000 3.695000 3.32500 17.71000 0.0000
## Mean 20.09062 6.1875 230.7219 146.6875 3.596563 3.21725 17.84875 0.4375
## 3rd Qu. 22.80000 8.0000 326.0000 180.0000 3.920000 3.61000 18.90000 1.0000
## Max. 33.90000 8.0000 472.0000 335.0000 4.930000 5.42400 22.90000 1.0000
## am gear carb
## Min. 0.00000 3.0000 1.0000
## 1st Qu. 0.00000 3.0000 2.0000
## Median 0.00000 4.0000 2.0000
## Mean 0.40625 3.6875 2.8125
## 3rd Qu. 1.00000 4.0000 4.0000
## Max. 1.00000 5.0000 8.0000
# Aplikasi sapply dengan fungsi summary pada sebuah list yang berisi 2 dataframe yaitu mobil & anggrek
df2 <- list(df.mobil=mobil,df.anggrek=anggrek)
sapply(df2, FUN= summary)
## $df.mobil
## mpg cyl disp hp
## Min. :10.40 Min. :4.000 Min. : 71.1 Min. : 52.0
## 1st Qu.:15.43 1st Qu.:4.000 1st Qu.:120.8 1st Qu.: 96.5
## Median :19.20 Median :6.000 Median :196.3 Median :123.0
## Mean :20.09 Mean :6.188 Mean :230.7 Mean :146.7
## 3rd Qu.:22.80 3rd Qu.:8.000 3rd Qu.:326.0 3rd Qu.:180.0
## Max. :33.90 Max. :8.000 Max. :472.0 Max. :335.0
## drat wt qsec vs
## Min. :2.760 Min. :1.513 Min. :14.50 Min. :0.0000
## 1st Qu.:3.080 1st Qu.:2.581 1st Qu.:16.89 1st Qu.:0.0000
## Median :3.695 Median :3.325 Median :17.71 Median :0.0000
## Mean :3.597 Mean :3.217 Mean :17.85 Mean :0.4375
## 3rd Qu.:3.920 3rd Qu.:3.610 3rd Qu.:18.90 3rd Qu.:1.0000
## Max. :4.930 Max. :5.424 Max. :22.90 Max. :1.0000
## am gear carb
## Min. :0.0000 Min. :3.000 Min. :1.000
## 1st Qu.:0.0000 1st Qu.:3.000 1st Qu.:2.000
## Median :0.0000 Median :4.000 Median :2.000
## Mean :0.4062 Mean :3.688 Mean :2.812
## 3rd Qu.:1.0000 3rd Qu.:4.000 3rd Qu.:4.000
## Max. :1.0000 Max. :5.000 Max. :8.000
##
## $df.anggrek
## Sepal.Length Sepal.Width Petal.Length Petal.Width
## Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.100
## 1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300
## Median :5.800 Median :3.000 Median :4.350 Median :1.300
## Mean :5.843 Mean :3.057 Mean :3.758 Mean :1.199
## 3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.800
## Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.500
## Species
## setosa :50
## versicolor:50
## virginica :50
##
##
##
Format penulisan fungsi tapply()
yaitu :
tapply(X, INDEX, FUN, ...)
dengan :
# Buat dataframe nilai UTS Kalkulus mahasiswa berdasarkan dosen pengampu makul
set.seed(123)
nilai.uts <-data.frame(dosen=c(rep("A",6),rep("B",6),rep("C",6)),nilai=sample(50:99,18,replace = T))
nilai.uts
## dosen nilai
## 1 A 80
## 2 A 64
## 3 A 63
## 4 A 52
## 5 A 91
## 6 A 99
## 7 B 92
## 8 B 86
## 9 B 63
## 10 B 74
## 11 B 75
## 12 B 76
## 13 C 54
## 14 C 76
## 15 C 77
## 16 C 58
## 17 C 78
## 18 C 84
# Menghitung rata rata nilai Kalkulus mahasiswa berdasarkan dosen pengampu makul
# dengan X : nilai dan INDEX : dosen pengajar
tapply(nilai.uts$nilai,nilai.uts$dosen,FUN=mean)
## A B C
## 74.83333 77.66667 71.16667
Adapun referensi yang dipakai dalam penulisan ini antara lain :
## ###################################################################################### ##
## https://bookdown.org/moh_rosidi2610/Metode_Numerik/programmingandfunction.html#tapply ##
## https://rpubs.com/n_statistics/apply_family ##
## https://rpubs.com/euler-tech/292794 ##
## https://ademos.people.uic.edu/Chapter4.html#1_what_are_apply_functions ##
## ###################################################################################### ##