www.jagostat.com

www.jagostat.com

Website Belajar Matematika & Statistika

Website Belajar Matematika & Statistika

Tutorial R   »   Dasar-dasar Pemrograman R   ›  Keluarga Fungsi apply dalam Pemrograman R
apply Function Family

Keluarga Fungsi apply dalam Pemrograman R

Selain perintah looping for, while, dan repeat, R juga memiliki fungsi atau command yang dapat melakukan looping secara cepat yang dikenal dengan keluarga fungsi apply.


Flag Counter

Kita telah mempelajari tiga struktur perulangan (looping) yakni for, while, dan repeat. Selain ketiga perintah looping tersebut, R juga memiliki fungsi atau command yang dapat melakukan looping secara cepat yang dikenal dengan keluarga fungsi apply.

Keluarga fungsi apply ini merupakan salah satu keunggulan R, sehingga jika memerlukan perulangan (looping), usahakan gunakan fungsi apply, dibandingkan menggunakan perulangan seperti for loop atau while loop.

Fungsi apply

Fungsi apply bekerja dengan jenis data matrik atau array. Kita dapat menentukan apakah suatu fungsi hanya akan diterapkan pada kolom saja, baris saja atau keduanya. Adapun format fungsi ini adalah sebagai berikut:

                
                    apply(X, MARGIN, FUN, ...)
                
              
Argumen
Xberupa suatu array, termasuk matriks.
MARGINberupa suatu vektor dengan nilai 1 atau 2 yang menandakan apakah suatu fungsi akan diterapkan pada baris, kolom atau keduanya sekaligus. Misalnya, 1: fungsi diterapkan pada baris, 2: fungsi diterapkan pada kolom, dan c(1,2): fungsi diterapkan pada baris dan kolom.
FUNfungsi yang akan diterapkan.
...argumen opsional untuk FUN.

Sebagai contoh, kita akan terapkan fungsi apply pada data car yang merupakan dataset bawaan dalam R.

                
                    data(cars)
                    head(cars)
                    
                    Output:
                      speed dist
                    1     4    2
                    2     4   10
                    3     7    4
                    4     7   22
                    5     8   16
                    6     9   10
                
              

Sekarang, kita akan menghitung rata-rata per kolom dan per baris dan juga menghitung standar deviasi pada dataset car dengan menggunakan fungsi apply berdasarkan fungsi yang telah ada yakni mean dan sd.

                
                    # menghitung rata-rata per kolom dengan fungsi mean()
                    apply(cars, 2, mean)
                    
                    Output:
                    speed  dist 
                    15.40 42.98 
                    
                    # menghitung rata-rata per baris dengan fungsi mean()
                    apply(cars[1:3,], 1, mean)
                    
                    Output:
                      1   2   3 
                    3.0 7.0 5.5 
                    
                    # standard deviasi per kolom
                    apply(cars, 2, sd)
                    
                    Output:
                        speed      dist 
                     5.287644 25.769377 
                
              

Selain menggunakan fungsi yang telah tersedia (misalnya mean dan sd), kita juga bisa membuat fungsi sendiri. Perhatikan contoh berikut ini.

                
                    ## menggunakan fungsi yang kita buat sendiri
                    x <- 1:15
                    test <- function(x) {
                      if(x < 10) {
                        x - 1
                      } else {
                        x/x
                      }
                    }
                    apply(as.matrix(x), 1, test)
                    
                    Output:
                    [1] 0 1 2 3 4 5 6 7 8 1 1 1 1 1 1
                
              
Fungsi tapply

Fungsi ini akan sangat berguna jika kita ingin menghitung suatu nilai (misalnya rata-rata atau mean) berdasarkan suatu kelompok (grup) data berjenis factor atau kategorik. Adapun format fungsi ini adalah sebagai berikut:

                
                    tapply(X, INDEX, FUN = NULL, ..., default = NA, simplify = TRUE)
                
              
Argumen
Xberupa vektor, dataframe atau list.
INDEXlist dari satu atau beberapa factor yang memiliki panjang sama dengan X. Elemen-elemen dipaksa menjadi tipe faktor dengan as.factor.
FUNfungsi yang akan digunakan.
...argumen opsional pada fungsi yang akan digunakan.
defaultlogical; if FALSE, tapply always returns an array of mode "list"; in other words, a list with a dim attribute. If TRUE (the default), then if FUN always returns a scalar, tapply returns an array with the mode of the scalar.
simplifylogical; if FALSE, tapply always returns an array of mode "list"; in other words, a list with a dim attribute. If TRUE (the default), then if FUN always returns a scalar, tapply returns an array with the mode of the scalar.

Sebagai contoh, kita akan gunakan data iris yang merupakan dataset bawaan (built-in dataset) dalam R.

                
                    data(iris)
                    head(iris)
                    
                    Output:
                      Sepal.Length Sepal.Width Petal.Length Petal.Width Species
                    1          5.1         3.5          1.4         0.2  setosa
                    2          4.9         3.0          1.4         0.2  setosa
                    3          4.7         3.2          1.3         0.2  setosa
                    4          4.6         3.1          1.5         0.2  setosa
                    5          5.0         3.6          1.4         0.2  setosa
                    6          5.4         3.9          1.7         0.4  setosa
                
              

Selanjutnya, kita akan menghitung rata-rata dari petal.width (kolom ke-4) untuk setiap species (kolom ke-5).

                
                    # menghitung rata-rata dari petal.width untuk setiap species
                    
                    tapply(as.vector(iris[,4]), factor(iris[,5]), mean)
                    
                    Output:
                    setosa versicolor  virginica 
                     0.246      1.326      2.026 
                
              

Fungsi ini hanya dapat digunakan pada vector, jika ingin melakukan hal yang sama ke matriks maka dapat menggunakan fungsi aggregate. Perhatikan berikut ini.

                
                    ## Rata-rata setiap variabel untuk setiap spesies
                    aggregate(iris[,1:4], list(iris$Species), mean)
                    
                    Output:
                         Group.1 Sepal.Length Sepal.Width Petal.Length Petal.Width
                    1     setosa        5.006       3.428        1.462       0.246
                    2 versicolor        5.936       2.770        4.260       1.326
                    3  virginica        6.588       2.974        5.552       2.026
                
              
Fungsi lapply dan sapply

Fungsi lain yang termasuk dalam keluarga fungsi apply adalah lapply dan sapply di mana keduanya dapat digunakan pada vector atau objek bertipe list. Fungsi lapply akan menghasilkan sebuah list sedangkan sapply akan menghasilkan vector atau matriks.

                
                    lapply(X, FUN, ...)
                    sapply(X, FUN, ..., simplify = TRUE, USE.NAMES = TRUE)
                
              
Xberupa array, dataframe, atau list.
FUNfungsi yang akan diterapkan.
...argumen opsional untuk FUN.
simplifylogical. Jika nilainya TRUE, maka output yang dihasilkan adalah bentuk sederhana dari vektor, matrix atau array.
USE.NAMESjika list memiliki nama pada setiap elemennya, maka nama elemen tersebut akan secara default ditampilkan.

Sebagai contoh, kita akan gunakan dataset car dan menghitung jumlah 5 elemen pertama untuk tiap variabel (speed dan dist). Pertama, kita simpan nilai 5 elemen pertama pada tiap variabel ke dalam list dengan nama mylist. Kemudian menghitung jumlahnya dengan fungsi sum. Perhatikan sintaks berikut.

                
                    ## lapply and sapply
                    mylist <- as.list(cars[1:5,])
                    mylist
                    
                    Output:
                    $speed
                    [1] 4 4 7 7 8
                    
                    $dist
                    [1]  2 10  4 22 16
                    
                    ## menghitung jumlah setiap elemen pada list dengan nama mylist
                    ## hasilnya berupa list
                    lapply(mylist, sum)
                    
                    Output:
                    $speed
                    [1] 30
                    
                    $dist
                    [1] 54
                    
                    
                    ## menghitung jumlah setiap elemen pada list dengan nama mylist 
                    ## hasilnya berupa vektor
                    sapply(mylist,sum)
                    
                    Output:
                    speed  dist 
                       30    54     
                
              
Artikel Terkait

Anda hidup hanya sekali, tetapi jika Anda melakukannya dengan benar, sekali itu cukup.