Εφαρμογή(), lapply(), sapply(), tapply() Συνάρτηση στο R με Παραδείγματα
Αυτό το σεμινάριο στοχεύει στην εισαγωγή της συλλογής συναρτήσεων application(). Η συνάρτηση application() είναι η πιο βασική από όλες τις συλλογές. Θα μάθουμε επίσης sapply(), lapply() και tapply(). Η συλλογή εφαρμογών μπορεί να θεωρηθεί ως υποκατάστατο του βρόχου.
Η συλλογή application() συνοδεύεται από r ουσιαστικό πακέτο εάν εσείς εγκαταστήστε το R με το Anaconda. Η συνάρτηση Εφαρμογή στο R μπορεί να τροφοδοτηθεί με πολλές συναρτήσεις για την εκτέλεση πλεονάζουσας εφαρμογής σε μια συλλογή αντικειμένων (πλαίσιο δεδομένων, λίστα, διάνυσμα κ.λπ.). Ο σκοπός της application() είναι πρωτίστως να αποφευχθεί η ρητή χρήση των δομών βρόχου. Μπορούν να χρησιμοποιηθούν για μια λίστα εισόδου, μήτρα ή πίνακα και να εφαρμόσουν μια συνάρτηση. Οποιαδήποτε συνάρτηση μπορεί να μεταβιβαστεί στην εφαρμογή ().
συνάρτηση application().
ισχύουν() παίρνει πλαίσιο δεδομένων ή μήτρα ως είσοδο και δίνει έξοδο σε διάνυσμα, λίστα ή πίνακα. Ισχύουν λειτουργία στο R χρησιμοποιείται κυρίως για την αποφυγή ρητών χρήσεων δομών βρόχου. Είναι η πιο βασική από όλες τις συλλογές που μπορεί να χρησιμοποιηθεί σε πίνακες.
Αυτή η συνάρτηση παίρνει 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>
Το απλούστερο παράδειγμα είναι να αθροίσουμε έναν πίνακα σε όλες τις στήλες. Ο κώδικας apply(m1, 2, sum) θα εφαρμόσει τη συνάρτηση αθροίσματος στον πίνακα 5×6 και θα επιστρέψει το άθροισμα κάθε στήλης που είναι προσβάσιμη στο σύνολο δεδομένων.
m1 <- matrix(C<-(1:10),nrow=5, ncol=6) m1 a_m1 <- apply(m1, 2, sum) a_m1
Παραγωγή:
Καλυτερα πρακτική: Αποθηκεύστε τις τιμές πριν το εκτυπώσετε στην κονσόλα.
συνάρτηση lapply().
lapply() Η συνάρτηση είναι χρήσιμη για την εκτέλεση λειτουργιών σε αντικείμενα λίστας και επιστρέφει ένα αντικείμενο λίστας ίδιου μήκους του αρχικού συνόλου. Η lappy() επιστρέφει μια λίστα παρόμοιου μήκους με το αντικείμενο λίστας εισόδου, κάθε στοιχείο της οποίας είναι το αποτέλεσμα της εφαρμογής FUN στο αντίστοιχο στοιχείο της λίστας. Το Lapply in R λαμβάνει λίστα, διάνυσμα ή πλαίσιο δεδομένων ως είσοδο και δίνει έξοδο στη λίστα.
lapply(X, FUN) Arguments: -X: A vector or an object -FUN: Function applied to each element of x
Το l στο lapply() σημαίνει λίστα. Η διαφορά μεταξύ lapply() και apply() βρίσκεται μεταξύ της απόδοσης εξόδου. Η έξοδος της 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 στο R κάνει την ίδια δουλειά με τη συνάρτηση lapply() αλλά επιστρέφει ένα διάνυσμα.
sapply(X, FUN) Arguments: -X: A vector or an object -FUN: Function applied to each element of x
Μπορούμε να μετρήσουμε την ελάχιστη ταχύτητα και τις αποστάσεις ακινητοποίησης των αυτοκινήτων από το σύνολο δεδομένων αυτοκινήτων.
dt <- cars lmn_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 στο R είναι πιο αποτελεσματικό από το lapply() στην έξοδο που επιστρέφεται επειδή η sapply() αποθηκεύει τιμές απευθείας σε ένα διάνυσμα. Στο επόμενο παράδειγμα, θα δούμε ότι αυτό δεν συμβαίνει πάντα.
Μπορούμε να συνοψίσουμε τη διαφορά μεταξύ application(), sapply() και `lapply() στον παρακάτω πίνακα:
Λειτουργία | Επιχειρήματα | Σκοπός | Εισαγωγή | Παραγωγή |
---|---|---|---|---|
κάντε αίτηση εδώ. | εφαρμογή (x, MARGIN, FUN) | Εφαρμόστε μια συνάρτηση στις γραμμές ή τις στήλες ή και στις δύο | Πλαίσιο δεδομένων ή μήτρα | διάνυσμα, λίστα, πίνακας |
εφαρμόστε | lapply (X, FUN) | Εφαρμόστε μια συνάρτηση σε όλα τα στοιχεία της εισόδου | Λίστα, διάνυσμα ή πλαίσιο δεδομένων | λίστα |
τροφοδοτώ | Sapply (X, FUN) | Εφαρμόστε μια συνάρτηση σε όλα τα στοιχεία της εισόδου | Λίστα, διάνυσμα ή πλαίσιο δεδομένων | διάνυσμα ή μήτρα |
Φέτα διάνυσμα
Μπορούμε να χρησιμοποιήσουμε εναλλάξιμα lapply() ή sapply() για να τεμαχίσουμε ένα πλαίσιο δεδομένων. Δημιουργούμε μια συνάρτηση, κάτω από το μέσο όρο (), που παίρνει ένα διάνυσμα αριθμητικών τιμών και επιστρέφει ένα διάνυσμα που περιέχει μόνο τις τιμές που είναι αυστηρά πάνω από τον μέσο όρο. Συγκρίνουμε και τα δύο αποτελέσματα με τη συνάρτηση identical().
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() υπολογίζει ένα μέτρο (μέσος όρος, διάμεσος, min, max, κ.λπ..) ή μια συνάρτηση για κάθε μεταβλητή παράγοντα σε ένα διάνυσμα. Είναι μια πολύ χρήσιμη συνάρτηση που σας επιτρέπει να δημιουργήσετε ένα υποσύνολο ενός διανύσματος και στη συνέχεια να εφαρμόσετε ορισμένες συναρτήσεις σε κάθε υποσύνολο.
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
Μέρος της δουλειάς ενός επιστήμονα δεδομένων ή ερευνητών είναι να υπολογίζει περιλήψεις μεταβλητών. Για παράδειγμα, μετρήστε τον μέσο όρο ή ομαδοποιήστε τα δεδομένα με βάση ένα χαρακτηριστικό. Τα περισσότερα από τα δεδομένα ομαδοποιούνται κατά ταυτότητα, πόλη, χώρες κ.λπ. Η σύνοψη στην ομάδα αποκαλύπτει πιο ενδιαφέροντα μοτίβα.
Για να κατανοήσουμε πώς λειτουργεί, ας χρησιμοποιήσουμε το σύνολο δεδομένων ίριδας. Αυτό το σύνολο δεδομένων είναι πολύ διάσημο στον κόσμο της μηχανικής μάθησης. Ο σκοπός αυτού του συνόλου δεδομένων είναι να προβλέψει την τάξη καθενός από τα τρία είδη λουλουδιών: Sepal, Versicolor, Virginica. Το σύνολο δεδομένων συλλέγει πληροφορίες για κάθε είδος σχετικά με το μήκος και το πλάτος τους.
Ως προηγούμενη εργασία, μπορούμε να υπολογίσουμε τη διάμεσο του μήκους για κάθε είδος. Το Tapply in R είναι ένας γρήγορος τρόπος για να εκτελέσετε αυτόν τον υπολογισμό.
data(iris) tapply(iris$Sepal.Width, iris$Species, median)
Παραγωγή:
## setosa versicolor virginica ## 3.4 2.8 3.0