Apply (), lapply (), sapply (), tapply () Fungsi di R dengan Contoh

Daftar Isi:

Anonim

Tutorial ini bertujuan untuk memperkenalkan kumpulan fungsi apply (). Fungsi apply () adalah yang paling dasar dari semua koleksi. Kita juga akan belajar sapply (), lapply () dan tapply (). Koleksi yang diterapkan dapat dilihat sebagai pengganti loop.

Koleksi apply () dibundel dengan r paket penting jika Anda menginstal R dengan Anaconda. Fungsi apply () dapat diisi dengan banyak fungsi untuk melakukan aplikasi redundan pada kumpulan objek (bingkai data, daftar, vektor, dll.). Tujuan apply () terutama untuk menghindari penggunaan eksplisit dari konstruksi loop. Mereka dapat digunakan untuk daftar masukan, matriks atau larik dan menerapkan fungsi. Fungsi apa pun bisa diteruskan ke apply ().

Dalam tutorial ini, Anda akan belajar

  • apply () fungsi
  • lapply ()
  • sapply ()
  • Vektor irisan
  • tapply ()

apply () fungsi

apply () mengambil data frame atau matrix sebagai masukan dan memberikan keluaran dalam bentuk vektor, daftar atau larik. apply () Fungsi terutama digunakan untuk menghindari penggunaan eksplisit dari konstruksi loop. Ini adalah yang paling dasar dari semua koleksi yang dapat digunakan di atas sebuah matrice.

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 di semua kolom. Kode berlaku (m1, 2, sum) akan menerapkan fungsi penjumlahan ke matriks 5x6 dan mengembalikan jumlah setiap kolom yang dapat diakses dalam kumpulan data.

m1 <- matrix(C<-(1:10),nrow=5, ncol=6)m1a_m1 <- apply(m1, 2, sum)a_m1

Keluaran:

Praktik terbaik: Simpan nilai sebelum mencetaknya ke konsol.

lapply ()

Fungsi lapply () berguna untuk melakukan operasi pada objek daftar dan mengembalikan objek daftar dengan panjang yang sama dari set aslinya. lappy () mengembalikan daftar dengan panjang yang sama sebagai objek daftar masukan, yang masing-masing elemennya merupakan hasil dari penerapan FUN ke elemen daftar yang sesuai. lapply () mengambil list, 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 list. Perbedaan antara lapply () dan apply () terletak di antara hasil keluaran. Output dari lapply () adalah sebuah daftar. lapply () dapat digunakan untuk objek lain seperti bingkai data dan daftar.

Fungsi lapply () tidak membutuhkan MARGIN.

Contoh yang sangat mudah adalah mengubah nilai string dari matriks menjadi huruf kecil dengan fungsi yang lebih rendah. Kami membuat matriks dengan nama film terkenal. Nama 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 bisa menggunakan unlist () untuk mengubah list menjadi vektor.

movies_lower <-unlist(lapply(movies,tolower))str(movies_lower)

Keluaran:

## chr [1:4] "spyderman" "batman" "vertigo" "chinatown"

sapply ()

Fungsi sapply () mengambil list, vektor atau bingkai data sebagai masukan dan memberikan keluaran dalam bentuk vektor atau matriks. Ini berguna untuk operasi pada objek daftar dan mengembalikan objek daftar dengan panjang yang sama dari set aslinya. fungsi sapply () melakukan pekerjaan yang sama seperti fungsi lapply () tetapi mengembalikan vektor.

sapply(X, FUN)Arguments:-X: A vector or an object-FUN: Function applied to each element of x

Kami dapat mengukur kecepatan minimum dan jarak berhenti mobil dari kumpulan data mobil.

dt <- carslmn_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 bisa menggunakan fungsi bawaan pengguna ke lapply () atau sapply (). Kami 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

Fungsi sapply () lebih efisien daripada lapply () dalam output yang dikembalikan karena sapply () menyimpan nilai langsung ke dalam vektor. Dalam contoh berikut, kita akan melihat bahwa tidak selalu demikian.

Kita bisa meringkas perbedaan antara apply (), sapply () dan `lapply () pada tabel berikut:

Fungsi

Argumen

Objektif

Memasukkan

Keluaran

menerapkan

terapkan (x, MARGIN, FUN)

Menerapkan fungsi ke baris atau kolom atau keduanya

Bingkai atau matriks data

vektor, daftar, larik

lapply

lapply (X, FUN)

Menerapkan fungsi ke semua elemen masukan

Daftar, vektor, atau bingkai data

daftar

sapply

cengeng (X FUN)

Menerapkan fungsi ke semua elemen masukan

Daftar, vektor, atau bingkai data

vektor atau matriks

Vektor irisan

Kita bisa menggunakan lapply () atau sapply () interchangeable untuk mengiris bingkai data. Kami membuat fungsi, below_average (), yang mengambil vektor nilai numerik dan mengembalikan vektor yang hanya berisi nilai yang benar-benar 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

tapply ()

tapply () menghitung ukuran (mean, median, min, max, dll…) atau fungsi untuk setiap variabel faktor dalam vektor. Ini adalah fungsi yang sangat berguna yang memungkinkan Anda membuat subset vektor dan kemudian menerapkan beberapa fungsi ke masing-masing subset.

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 seorang ilmuwan data 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 kelompok mengungkapkan pola yang lebih menarik.

Untuk memahami cara kerjanya, mari gunakan dataset iris. Dataset ini sangat terkenal di dunia pembelajaran mesin. Tujuan dari kumpulan data ini adalah untuk memprediksi kelas masing-masing dari tiga spesies bunga: Sepal, Versicolor, Virginica. Dataset mengumpulkan informasi untuk setiap spesies tentang panjang dan lebarnya.

Sebagai pekerjaan sebelumnya, kita dapat menghitung median dari panjang setiap spesies. tapply () adalah cara cepat untuk melakukan komputasi ini.

data(iris)tapply(iris$Sepal.Width, iris$Species, median)

Keluaran:

## setosa versicolor virginica## 3.4 2.8 3.0