Hàm apply (), lapply (), sapply (), tapply () trong R với các ví dụ

Mục lục:

Anonim

Hướng dẫn này nhằm mục đích giới thiệu bộ sưu tập hàm apply (). Hàm apply () là hàm cơ bản nhất trong tất cả các bộ sưu tập. Chúng ta cũng sẽ học sapply (), lapply () và tapply (). Bộ sưu tập áp dụng có thể được xem như một sự thay thế cho vòng lặp.

Bộ sưu tập apply () được đóng gói với gói thiết yếu r nếu bạn cài đặt R với Anaconda. Hàm apply () có thể được cung cấp với nhiều hàm để thực hiện ứng dụng dư thừa trên một tập hợp các đối tượng (khung dữ liệu, danh sách, vectơ, v.v.). Mục đích của apply () chủ yếu là để tránh sử dụng rõ ràng các cấu trúc vòng lặp. Chúng có thể được sử dụng cho danh sách đầu vào, ma trận hoặc mảng và áp dụng một hàm. Bất kỳ hàm nào cũng có thể được chuyển vào apply ().

Trong hướng dẫn này, bạn sẽ học

  • hàm apply ()
  • hàm lapply ()
  • hàm sapply ()
  • Véc tơ lát
  • hàm tapply ()

hàm apply ()

apply () lấy khung dữ liệu hoặc ma trận làm đầu vào và đưa ra đầu ra dưới dạng vectơ, danh sách hoặc mảng. Hàm apply () chủ yếu được sử dụng để tránh sử dụng rõ ràng các cấu trúc vòng lặp. Nó là cơ bản nhất của tất cả các bộ sưu tập có thể được sử dụng trên một tấm thảm.

Hàm này có 3 đối số:

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>

Ví dụ đơn giản nhất là tính tổng một matrice trên tất cả các cột. Mã áp dụng (m1, 2, sum) sẽ áp dụng hàm tổng cho ma trận 5x6 và trả về tổng của mỗi cột có thể truy cập trong tập dữ liệu.

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

Đầu ra:

Phương pháp hay nhất: Lưu trữ các giá trị trước khi in ra bảng điều khiển.

hàm lapply ()

Hàm lapply () hữu ích để thực hiện các hoạt động trên các đối tượng danh sách và trả về một đối tượng danh sách có cùng độ dài của tập hợp ban đầu. lappy () trả về một danh sách có độ dài tương tự như đối tượng danh sách đầu vào, mỗi phần tử trong số đó là kết quả của việc áp dụng FUN cho phần tử tương ứng của danh sách. lapply () nhận danh sách, vectơ hoặc khung dữ liệu làm đầu vào và đưa ra đầu ra trong danh sách.

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

l trong lapply () là viết tắt của danh sách. Sự khác biệt giữa lapply () và apply () nằm giữa kết quả đầu ra. Đầu ra của lapply () là một danh sách. lapply () có thể được sử dụng cho các đối tượng khác như khung dữ liệu và danh sách.

Hàm lapply () không cần MARGIN.

Một ví dụ rất dễ dàng có thể là thay đổi giá trị chuỗi của ma trận thành chữ thường bằng hàm tolower. Chúng tôi xây dựng một ma trận với tên của các bộ phim nổi tiếng. Tên ở định dạng chữ hoa.

movies <- c("SPYDERMAN","BATMAN","VERTIGO","CHINATOWN")movies_lower <-lapply(movies, tolower)str(movies_lower)

Đầu ra:

## List of 4## $:chr"spyderman"## $:chr"batman"## $:chr"vertigo"## $:chr"chinatown"

Chúng ta có thể sử dụng unlist () để chuyển đổi danh sách thành một vector.

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

Đầu ra:

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

hàm sapply ()

Hàm sapply () nhận danh sách, vectơ hoặc khung dữ liệu làm đầu vào và đưa ra đầu ra dưới dạng vectơ hoặc ma trận. Nó hữu ích cho các hoạt động trên các đối tượng danh sách và trả về một đối tượng danh sách có cùng độ dài của tập hợp ban đầu. Hàm sapply () thực hiện công việc tương tự như hàm lapply () nhưng trả về một vectơ.

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

Chúng tôi có thể đo tốc độ tối thiểu và khoảng cách dừng của ô tô từ tập dữ liệu ô tô.

dt <- carslmn_cars <- lapply(dt, min)smn_cars <- sapply(dt, min)lmn_cars

Đầu ra:

## $speed## [1] 4## $dist## [1] 2
smn_cars

Đầu ra:

## speed dist## 4 2
lmxcars <- lapply(dt, max)smxcars <- sapply(dt, max)lmxcars

Đầu ra:

## $speed## [1] 25## $dist## [1] 120
smxcars

Đầu ra:

## speed dist## 25 120

Chúng ta có thể sử dụng một hàm tích hợp sẵn của người dùng vào lapply () hoặc sapply (). Chúng tôi tạo một hàm có tên là avg để tính giá trị trung bình của giá trị nhỏ nhất và lớn nhất của vectơ.

avg <- function(x) {( min(x) + max(x) ) / 2}fcars <- sapply(dt, avg)fcars

Đầu ra

## speed dist## 14.5 61.0

Hàm sapply () hiệu quả hơn lapply () trong kết quả trả về vì hàm sapply () lưu trữ các giá trị trực tiếp thành một vectơ. Trong ví dụ tiếp theo, chúng ta sẽ thấy điều này không phải luôn luôn như vậy.

Chúng ta có thể tóm tắt sự khác biệt giữa apply (), sapply () và `lapply () trong bảng sau:

Chức năng

Tranh luận

Mục tiêu

Đầu vào

Đầu ra

ứng dụng

áp dụng (x, MARGIN, FUN)

Áp dụng một hàm cho các hàng hoặc cột hoặc cả hai

Khung dữ liệu hoặc ma trận

vector, danh sách, mảng

lapply

lapply (X, FUN)

Áp dụng một hàm cho tất cả các phần tử của đầu vào

Danh sách, vectơ hoặc khung dữ liệu

danh sách

sapply

sappy (X FUN)

Áp dụng một hàm cho tất cả các phần tử của đầu vào

Danh sách, vectơ hoặc khung dữ liệu

vectơ hoặc ma trận

Véc tơ lát

Chúng ta có thể sử dụng có thể hoán đổi cho nhau lapply () hoặc sapply () để cắt một khung dữ liệu. Chúng tôi tạo một hàm dưới đây, hàm dưới_average (), nhận một vectơ các giá trị số và trả về một vectơ chỉ chứa các giá trị cao hơn giá trị trung bình. Chúng tôi so sánh cả hai kết quả với hàm () giống hệt nhau.

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)

Đầu ra:

## [1] TRUE

hàm tapply ()

tapply () tính toán một số đo (trung bình, trung vị, tối thiểu, tối đa, v.v.) hoặc một hàm cho mỗi biến nhân tố trong một vectơ. Đây là một hàm rất hữu ích cho phép bạn tạo một tập hợp con của một vectơ và sau đó áp dụng một số hàm cho từng tập con.

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

Một phần công việc của nhà khoa học dữ liệu hoặc các nhà nghiên cứu là tính toán tóm tắt các biến. Ví dụ: đo lường dữ liệu trung bình hoặc dữ liệu nhóm dựa trên một đặc điểm. Hầu hết dữ liệu được nhóm theo ID, thành phố, quốc gia, v.v. Tóm tắt theo nhóm cho thấy nhiều mẫu thú vị hơn.

Để hiểu cách nó hoạt động, hãy sử dụng tập dữ liệu mống mắt. Bộ dữ liệu này rất nổi tiếng trong thế giới máy học. Mục đích của tập dữ liệu này là để dự đoán lớp của từng loài hoa trong số ba loài hoa: Sepal, Versicolor, Virginica. Bộ dữ liệu thu thập thông tin cho từng loài về chiều dài và chiều rộng của chúng.

Như một nghiên cứu trước đây, chúng tôi có thể tính giá trị trung bình của chiều dài cho mỗi loài. tapply () là một cách nhanh chóng để thực hiện tính toán này.

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

Đầu ra:

## setosa versicolor virginica## 3.4 2.8 3.0