Αυτό το σεμινάριο στοχεύει στην εισαγωγή της συλλογής συνάρτησης apply (). Η συνάρτηση apply () είναι η πιο βασική από όλες τις συλλογές. Θα μάθουμε επίσης sapply (), lapply () και tapply (). Η συλλογή εφαρμογών μπορεί να θεωρηθεί ως υποκατάστατο του βρόχου.
Η συλλογή apply () συνοδεύεται από βασικό πακέτο r εάν εγκαταστήσετε το R με το Anaconda. Η συνάρτηση apply () μπορεί να τροφοδοτείται με πολλές λειτουργίες για την εκτέλεση περιττής εφαρμογής σε μια συλλογή αντικειμένων (πλαίσιο δεδομένων, λίστα, διάνυσμα κ.λπ.) Ο σκοπός της εφαρμογής () είναι κατά κύριο λόγο η αποφυγή ρητών χρήσεων των κατασκευών βρόχου. Μπορούν να χρησιμοποιηθούν για μια λίστα εισόδου, πίνακα ή πίνακα και να εφαρμόσουν μια συνάρτηση. Οποιαδήποτε συνάρτηση μπορεί να περάσει στην εφαρμογή ().
Σε αυτό το σεμινάριο, θα μάθετε
- εφαρμογή () συνάρτηση
- συνάρτηση lapply ()
- λειτουργία sapply ()
- Διάνυσμα φέτα
- πατήστε τη λειτουργία ()
εφαρμογή () συνάρτηση
Η εφαρμογή () παίρνει το πλαίσιο δεδομένων ή τον πίνακα ως είσοδο και δίνει έξοδο σε διάνυσμα, λίστα ή πίνακα. apply () Η συνάρτηση χρησιμοποιείται κυρίως για την αποφυγή ρητών χρήσεων των κατασκευών βρόχου. Είναι το πιο βασικό από όλες τις συλλογές που μπορούν να χρησιμοποιηθούν πάνω από μια μήτρα.
Αυτή η συνάρτηση περιλαμβάνει 3 ορίσματα:
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>
Το απλούστερο παράδειγμα είναι να αθροίσουμε έναν πίνακα σε όλες τις στήλες. Ο κωδικός που ισχύει (m1, 2, άθροισμα) θα εφαρμόσει τη συνάρτηση αθροίσματος στη μήτρα 5x6 και θα επιστρέψει το άθροισμα κάθε στήλης προσβάσιμης στο σύνολο δεδομένων.
m1 <- matrix(C<-(1:10),nrow=5, ncol=6)m1a_m1 <- apply(m1, 2, sum)a_m1
Παραγωγή:
Βέλτιστη πρακτική: Αποθηκεύστε τις τιμές πριν την εκτυπώσετε στην κονσόλα.
συνάρτηση lapply ()
Η λειτουργία lapply () είναι χρήσιμη για την εκτέλεση λειτουργιών σε αντικείμενα λίστας και επιστρέφει ένα αντικείμενο λίστας ίδιου μήκους αρχικού συνόλου. Το lappy () επιστρέφει μια λίστα με παρόμοιο μήκος με το αντικείμενο της λίστας εισόδου, κάθε στοιχείο του οποίου είναι το αποτέλεσμα της εφαρμογής FUN στο αντίστοιχο στοιχείο της λίστας. Το lapply () λαμβάνει τη λίστα, το διάνυσμα ή το πλαίσιο δεδομένων ως είσοδο και δίνει έξοδο στη λίστα.
lapply(X, FUN)Arguments:-X: A vector or an object-FUN: Function applied to each element of x
l στο lapply () σημαίνει λίστα. Η διαφορά μεταξύ lapply () και ισχύει () βρίσκεται μεταξύ της επιστροφής εξόδου. Η έξοδος του lapply () είναι μια λίστα. Το lapply () μπορεί να χρησιμοποιηθεί για άλλα αντικείμενα, όπως πλαίσια δεδομένων και λίστες.
Η λειτουργία lapply () δεν χρειάζεται MARGIN.
Ένα πολύ εύκολο παράδειγμα μπορεί να είναι η αλλαγή της τιμής συμβολοσειράς μιας μήτρας σε πεζά γράμματα με τη λειτουργία tolower. Κατασκευάζουμε μια μήτρα με το όνομα των διάσημων ταινιών. Το όνομα έχει κεφαλαία μορφή.
movies <- c("SPYDERMAN","BATMAN","VERTIGO","CHINATOWN")movies_lower <-lapply(movies, tolower)str(movies_lower)
Παραγωγή:
## List of 4## $:chr"spyderman"## $:chr"batman"## $:chr"vertigo"## $:chr"chinatown"
Μπορούμε να χρησιμοποιήσουμε το unlist () για να μετατρέψουμε τη λίστα σε ένα διάνυσμα.
movies_lower <-unlist(lapply(movies,tolower))str(movies_lower)
Παραγωγή:
## chr [1:4] "spyderman" "batman" "vertigo" "chinatown"
λειτουργία sapply ()
Η συνάρτηση sapply () λαμβάνει τη λίστα, το διάνυσμα ή το πλαίσιο δεδομένων ως είσοδο και δίνει έξοδο σε διάνυσμα ή μήτρα. Είναι χρήσιμο για λειτουργίες σε αντικείμενα λίστας και επιστρέφει ένα αντικείμενο λίστας ίδιου μήκους αρχικού συνόλου. Η συνάρτηση sapply () κάνει την ίδια δουλειά με τη συνάρτηση lapply () αλλά επιστρέφει ένα διάνυσμα.
sapply(X, FUN)Arguments:-X: A vector or an object-FUN: Function applied to each element of x
Μπορούμε να μετρήσουμε την ελάχιστη ταχύτητα και στάσεις αποστάσεων των αυτοκινήτων από το σύνολο δεδομένων των αυτοκινήτων.
dt <- carslmn_cars <- lapply(dt, min)smn_cars <- sapply(dt, min)lmn_cars
Παραγωγή:
## $speed## [1] 4## $dist## [1] 2
smn_cars
Παραγωγή:
## speed dist## 4 2
lmxcars <- lapply(dt, max)smxcars <- sapply(dt, max)lmxcars
Παραγωγή:
## $speed## [1] 25## $dist## [1] 120
smxcars
Παραγωγή:
## speed dist## 25 120
Μπορούμε να χρησιμοποιήσουμε μια ενσωματωμένη συνάρτηση χρήστη σε lapply () ή sapply (). Δημιουργούμε μια συνάρτηση με το όνομα avg για τον υπολογισμό του μέσου όρου του ελάχιστου και του μέγιστου του διανύσματος.
avg <- function(x) {( min(x) + max(x) ) / 2}fcars <- sapply(dt, avg)fcars
Παραγωγή
## speed dist## 14.5 61.0
Η συνάρτηση sapply () είναι πιο αποτελεσματική από ό, τι το lapply () στην έξοδο που επιστρέφεται επειδή το sapply () αποθηκεύει τις τιμές σε ένα διάνυσμα. Στο επόμενο παράδειγμα, θα δούμε ότι αυτό δεν ισχύει πάντα.
Μπορούμε να συνοψίσουμε τη διαφορά μεταξύ apply (), sapply () και "lapply () στον ακόλουθο πίνακα:
Λειτουργία |
Επιχειρήματα |
Σκοπός |
Εισαγωγή |
Παραγωγή |
---|---|---|---|---|
ισχύουν |
εφαρμογή (x, ΠΕΡΙΘΩΡΙΟ, ΛΕΙΤΟΥΡΓΙΑ) |
Εφαρμόστε μια συνάρτηση στις γραμμές ή τις στήλες ή και τα δύο |
Πλαίσιο δεδομένων ή μήτρα |
διάνυσμα, λίστα, πίνακας |
χάλια |
lapply (X, ΛΕΙΤΟΥΡΓΙΑ) |
Εφαρμόστε μια συνάρτηση σε όλα τα στοιχεία της εισόδου |
Λίστα, διάνυσμα ή πλαίσιο δεδομένων |
λίστα |
ευγενικά |
Sappy (X FUN) |
Εφαρμόστε μια συνάρτηση σε όλα τα στοιχεία της εισόδου |
Λίστα, διάνυσμα ή πλαίσιο δεδομένων |
διάνυσμα ή μήτρα |
Διάνυσμα φέτα
Μπορούμε να χρησιμοποιήσουμε lapply () ή sapply () εναλλάξιμα για να κόψουμε ένα πλαίσιο δεδομένων. Δημιουργούμε μια συνάρτηση, κάτω από το μέσο όρο (), που παίρνει ένα διάνυσμα αριθμητικών τιμών και επιστρέφει ένα διάνυσμα που περιέχει μόνο τις τιμές που είναι αυστηρά πάνω από τον μέσο όρο. Συγκρίνουμε και τα δύο αποτελέσματα με την ίδια συνάρτηση ().
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)
Παραγωγή:
## [1] TRUE
πατήστε τη λειτουργία ()
Το tapply () υπολογίζει ένα μέτρο (μέσος όρος, διάμεσος, ελάχιστος, μέγιστος, κ.λπ…) ή μια συνάρτηση για κάθε μεταβλητή παράγοντα σε ένα διάνυσμα. Είναι μια πολύ χρήσιμη λειτουργία που σας επιτρέπει να δημιουργήσετε ένα υποσύνολο ενός διανύσματος και, στη συνέχεια, να εφαρμόσετε μερικές συναρτήσεις σε κάθε υποσύνολο.
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
Μέρος της δουλειάς ενός επιστήμονα δεδομένων ή ερευνητών είναι να υπολογίσει περιλήψεις μεταβλητών. Για παράδειγμα, μετρήστε τον μέσο όρο ή τα δεδομένα ομάδας βάσει ενός χαρακτηριστικού. Τα περισσότερα από τα δεδομένα ομαδοποιούνται κατά ID, πόλη, χώρες και ούτω καθεξής. Η περίληψη της ομάδας αποκαλύπτει πιο ενδιαφέροντα μοτίβα.
Για να καταλάβουμε πώς λειτουργεί, ας χρησιμοποιήσουμε το σύνολο δεδομένων ίριδας. Αυτό το σύνολο δεδομένων είναι πολύ διάσημο στον κόσμο της μηχανικής μάθησης. Ο σκοπός αυτού του συνόλου δεδομένων είναι να προβλέψει την τάξη καθενός από τα τρία είδη λουλουδιών: Sepal, Versicolor, Virginica. Το σύνολο δεδομένων συλλέγει πληροφορίες για κάθε είδος σχετικά με το μήκος και το πλάτος τους.
Ως προηγούμενη εργασία, μπορούμε να υπολογίσουμε τη διάμεση τιμή του μήκους για κάθε είδος. Το tapply () είναι ένας γρήγορος τρόπος για να εκτελέσετε αυτόν τον υπολογισμό.
data(iris)tapply(iris$Sepal.Width, iris$Species, median)
Παραγωγή:
## setosa versicolor virginica## 3.4 2.8 3.0