apply(), lapply(), sapply(), tapply() Fungsi di R dengan Contoh
Tutorial ini bertujuan untuk memperkenalkan kumpulan fungsi apply(). Fungsi apply() adalah fungsi paling dasar dari semua koleksi. Kita juga akan mempelajari sapply(), lapply() dan tapply(). Koleksi apply dapat dilihat sebagai pengganti loop.
Koleksi apply() dibundel dengan r penting paket jika Anda instal R dengan Anaconda. Fungsi apply di R dapat diisi dengan banyak fungsi untuk melakukan aplikasi redundan pada kumpulan objek (bingkai data, daftar, vektor, dll.). Tujuan dari apply() terutama untuk menghindari penggunaan konstruksi loop secara eksplisit. Mereka dapat digunakan untuk daftar input, matriks atau array dan menerapkan suatu fungsi. Fungsi apa pun dapat diteruskan ke apply().
terapkan() fungsi
menerapkan() mengambil bingkai data atau matriks sebagai masukan dan memberikan keluaran dalam vektor, daftar, atau larik. Menerapkan berfungsi di R terutama digunakan untuk menghindari penggunaan konstruksi loop secara eksplisit. Ini adalah koleksi paling dasar yang dapat digunakan pada matriks.
Fungsi ini membutuhkan 3 argumen:
apply(X, MARGIN, FUN) Here: -x: an array or matrix -MARGIN: take a value or range between 1 and 2 to define where to apply the function: -MARGIN=1`: the manipulation is performed on rows -MARGIN=2`: the manipulation is performed on columns -MARGIN=c(1,2)` the manipulation is performed on rows and columns -FUN: tells which function to apply. Built functions like mean, median, sum, min, max and even user-defined functions can be applied>
Contoh paling sederhana adalah menjumlahkan matriks pada semua kolom. Kode apply(m1, 2, sum) akan menerapkan fungsi penjumlahan ke matriks 5×6 dan mengembalikan jumlah setiap kolom yang dapat diakses dalam kumpulan data.
m1 <- matrix(C<-(1:10),nrow=5, ncol=6) m1 a_m1 <- apply(m1, 2, sum) a_m1
Keluaran:
Praktik terbaik: Simpan nilai sebelum mencetaknya ke konsol.
lapply() fungsi
laply() Fungsi ini berguna untuk melakukan operasi pada objek daftar dan mengembalikan objek daftar dengan panjang yang sama dengan set aslinya. lappy() mengembalikan daftar dengan panjang yang sama dengan objek daftar input, yang setiap elemennya merupakan hasil penerapan FUN ke elemen daftar yang sesuai. Lapply di R mengambil daftar, vektor atau bingkai data sebagai masukan dan memberikan keluaran dalam daftar.
lapply(X, FUN) Arguments: -X: A vector or an object -FUN: Function applied to each element of x
l di lapply() adalah singkatan dari daftar. Perbedaan antara lapply() dan apply() terletak pada output yang dikembalikan. Output dari lapply() adalah sebuah daftar. lapply() dapat digunakan untuk objek lain seperti bingkai data dan daftar.
fungsi lapply() tidak memerlukan MARGIN.
Contoh yang sangat mudah adalah mengubah nilai string suatu matriks menjadi huruf kecil dengan fungsi yang lebih rendah. Kami membuat matriks dengan nama film terkenal. Namanya dalam format huruf besar.
movies <- c("SPYDERMAN","BATMAN","VERTIGO","CHINATOWN") movies_lower <-lapply(movies, tolower) str(movies_lower)
Keluaran:
## List of 4 ## $:chr"spyderman" ## $:chr"batman" ## $:chr"vertigo" ## $:chr"chinatown"
Kita dapat menggunakan unlist() untuk mengubah daftar menjadi vektor.
movies_lower <-unlist(lapply(movies,tolower)) str(movies_lower)
Keluaran:
## chr [1:4] "spyderman" "batman" "vertigo" "chinatown"
fungsi saply()
aplikasi() fungsi mengambil daftar, vektor atau bingkai data sebagai masukan dan memberikan keluaran dalam vektor atau matriks. Ini berguna untuk operasi pada objek daftar dan mengembalikan objek daftar dengan panjang yang sama dengan set aslinya. Fungsi Sapply di R melakukan pekerjaan yang sama dengan fungsi lapply() tetapi mengembalikan vektor.
sapply(X, FUN) Arguments: -X: A vector or an object -FUN: Function applied to each element of x
Kita dapat mengukur kecepatan minimum dan jarak berhenti mobil dari kumpulan data mobil.
dt <- cars lmn_cars <- lapply(dt, min) smn_cars <- sapply(dt, min) lmn_cars
Keluaran:
## $speed ## [1] 4 ## $dist ## [1] 2
smn_cars
Keluaran:
## speed dist ## 4 2
lmxcars <- lapply(dt, max) smxcars <- sapply(dt, max) lmxcars
Keluaran:
## $speed ## [1] 25 ## $dist ## [1] 120
smxcars
Keluaran:
## speed dist ## 25 120
Kita dapat menggunakan fungsi bawaan pengguna di lapply() atau sapply(). Kita membuat fungsi bernama avg untuk menghitung rata-rata minimum dan maksimum vektor.
avg <- function(x) { ( min(x) + max(x) ) / 2} fcars <- sapply(dt, avg) fcars
Keluaran
## speed dist ## 14.5 61.0
Sapply di R lebih efisien daripada lapply() pada output yang dikembalikan karena sapply() menyimpan nilai secara langsung ke dalam vektor. Pada contoh berikutnya, kita akan melihat bahwa hal ini tidak selalu terjadi.
Kita dapat meringkas perbedaan antara apply(), sapply() dan `lapply() dalam tabel berikut:
fungsi | kasus | Tujuan | Memasukkan | Keluaran |
---|---|---|---|---|
menerapkan | terapkan(x, MARGIN, MENYENANGKAN) | Menerapkan fungsi ke baris atau kolom atau keduanya | Bingkai atau matriks data | vektor, daftar, larik |
lapply | lapply(X, MENYENANGKAN) | Terapkan fungsi ke semua elemen input | Daftar, vektor, atau bingkai data | daftar |
berlaku | sapply(X, MENYENANGKAN) | Terapkan fungsi ke semua elemen input | Daftar, vektor, atau bingkai data | vektor atau matriks |
Irisan vektor
Kita dapat menggunakan lapply() atau sapply() yang dapat dipertukarkan untuk mengiris bingkai data. Kita membuat sebuah fungsi, di bawah_rata-rata(), yang mengambil vektor nilai numerik dan mengembalikan vektor yang hanya berisi nilai yang benar-benar berada di atas rata-rata. Kami membandingkan kedua hasil dengan fungsi identik().
below_ave <- function(x) { ave <- mean(x) return(x[x > ave]) } dt_s<- sapply(dt, below_ave) dt_l<- lapply(dt, below_ave) identical(dt_s, dt_l)
Keluaran:
## [1] TRUE
fungsi tapply()
ketuk() menghitung ukuran (rata-rata, median, min, maks, dll.) atau fungsi untuk setiap variabel faktor dalam vektor. Ini adalah fungsi yang sangat berguna yang memungkinkan Anda membuat subset dari sebuah vektor dan kemudian menerapkan beberapa fungsi ke masing-masing subset tersebut.
tapply(X, INDEX, FUN = NULL) Arguments: -X: An object, usually a vector -INDEX: A list containing factor -FUN: Function applied to each element of x
Bagian dari tugas data scientist atau peneliti adalah menghitung ringkasan variabel. Misalnya, mengukur rata-rata atau mengelompokkan data berdasarkan suatu karakteristik. Sebagian besar data dikelompokkan berdasarkan ID, kota, negara, dan sebagainya. Meringkas secara berkelompok mengungkapkan pola yang lebih menarik.
Untuk memahami cara kerjanya, mari gunakan dataset iris. Dataset ini sangat terkenal di dunia machine learning. Tujuan dari dataset ini adalah untuk memprediksi kelas masing-masing dari tiga spesies bunga: Sepal, Versicolor, Virginica. Kumpulan data mengumpulkan informasi untuk setiap spesies tentang panjang dan lebarnya.
Sebagai pekerjaan sebelumnya, kita dapat menghitung median panjang setiap spesies. Tapply di R adalah cara cepat untuk melakukan perhitungan ini.
data(iris) tapply(iris$Sepal.Width, iris$Species, median)
Keluaran:
## setosa versicolor virginica ## 3.4 2.8 3.0