Διαδρομές
/
R
R
/
Ύλη
/
Συναρτήσεις διανυσμάτων
Συ

Συναρτήσεις διανυσμάτων σε R

1 άσκηση

Σχετικά με την έννοια Συναρτήσεις διανυσμάτων

Αυτή είναι μια μεγάλη έννοια στη R. Για να βάλεις μια τάξη στις δυνατότητες, είναι χρήσιμο να σκεφτείς τον αριθμό των διαστάσεων της εισόδου και της εξόδου των διάφορων συναρτήσεων.

Διάνυσμα στην είσοδο, βαθμωτή τιμή στην έξοδο

Έχουμε ήδη δει συναρτήσεις που δέχονται ένα διάνυσμα και επιστρέφουν μία μόνο τιμή, σαν βαθμωτό μέγεθος:

v <- 1:5
length(v)
#> [1] 5
sum(v)
#> [1] 15

Πολλές στατιστικές συναρτήσεις ανήκουν επίσης σε αυτή την κατηγορία, όπως η mean().

Για λογικά διανύσματα υπάρχουν οι all() και any(), που επιστρέφουν ένα μόνο TRUE ή FALSE.

Διάνυσμα στην είσοδο, διάνυσμα στην έξοδο

Πολλές συναρτήσεις στη R λειτουργούν πάνω σε ολόκληρα διανύσματα, δίνοντας συχνά έξοδο ένα διάνυσμα. Αυτό περιλαμβάνει τις περισσότερες μαθηματικές συναρτήσεις:

sq <- c(4, 9, 16, 25)
sqrt(sq) # square root
#> [1] 2 3 4 5

Αυτό δεν είναι απλώς σύντομο και βολικό, αφού αποφεύγει την ανάγκη για βρόχους, list comprehensions ή αναδρομή, που συνηθίζονται σε άλλες γλώσσες. Στη R, οι διανυσματικές συναρτήσεις συχνά τρέχουν πολύ πιο γρήγορα από αυτές τις τεχνικές.

Έχεις ήδη χρησιμοποιήσει διανυσματοποιημένες συναρτήσεις πολύ περισσότερο απ' ό,τι μάλλον νομίζεις. Σύγκρινε αυτά:

v <- c(2, 7, 9)
w <- c(3, 1, 5)
v + w
#> [1]  5  8 14
"+"(v, w)
#> [1]  5  8 14

Οι γνωστοί τελεστές infix δεν είναι παρά συντακτική ζάχαρη για την υποκείμενη διανυσματοποιημένη συνάρτηση! Σε αυτή την περίπτωση, την "+"().

Για την ταξινόμηση ενός διανύσματος, υπάρχει η sort() που επιστρέφει τις τιμές και η order() που επιστρέφει τις θέσεις:

v <- c("I", "am", "not", "in", "order")
sort(v)
#> [1] "am"    "I"     "in"    "not"   "order"
order(v)
#> [1] 2 1 4 3 5

Από προεπιλογή, η ταξινόμηση γίνεται κατά αύξουσα σειρά. Δώσε decreasing = TRUE αν χρειάζεται, ή χρησιμοποίησε τη rev() για να αντιστρέψεις ένα υπάρχον διάνυσμα.

v <- c("I", "am", "not", "in", "order")
sort(v, decreasing = TRUE)
#> [1] "order" "not"   "in"    "I"     "am"

rev(1:4)
#> [1] 4 3 2 1

Υπάρχουν επίσης συναρτήσεις όπως οι cumsum() και cumprod() που παράγουν σωρευτικά διανύσματα εξόδου, δρώντας στο διάνυσμα εισόδου από αριστερά προς τα δεξιά:

cumsum(1:5)
#> [1]  1  3  6 10 15  # sums
cumprod(1:5)
#> [1]   1   2   6  24 120 # equivalent to factorials

Τα παραπάνω παραδείγματα μοιάζουν με πράξεις foldl σε πολλές συναρτησιακές γλώσσες, με τη διαφορά ότι η έξοδος είναι ένα διάνυσμα με όλες τις ενδιάμεσες τιμές.

Πολλά διανύσματα στην είσοδο, διάνυσμα στην έξοδο

Μια επέκταση αυτής της έννοιας μπορεί επίσης να χρησιμοποιηθεί για τη σύγκριση διανυσμάτων. Για παράδειγμα, δες τη συνάρτηση μεγίστου ανά ζεύγη pmax():

v
#> [1] 2 7 9
w
#> [1] 3 1 5
pmax(v, w)
#> [1] 3 7 9 # max of each pairwise comparison

Αυτή η συνάρτηση, όπως και άλλες σαν κι αυτή, δέχεται επίσης οποιονδήποτε αριθμό διανυσμάτων εισόδου, όχι μόνο δύο.

Το παραπάνω παράδειγμα χρησιμοποιεί διανύσματα ίσου μήκους. Όπως συζητήθηκε στην έννοια Φιλτράρισμα διανυσμάτων, η R χρησιμοποιεί την ανακύκλωση για να επεκτείνει διανύσματα που κατά κάποιον τρόπο είναι "πολύ κοντά". Για να το επαναλάβουμε: χρησιμοποίησέ το με προσοχή, και κατά προτίμηση μόνο με διάνυσμα μήκους 1.

pmax(v, 5)
#> [1] 5 7 9

Διάνυσμα στην είσοδο, μήτρα στην έξοδο

Αυτό είναι λιγότερο συνηθισμένο, αλλά είναι αρκετά εύκολο να γράψεις συναρτήσεις που φαινομενικά δέχονται βαθμωτό μέγεθος και βγάζουν διάνυσμα. Όταν εφαρμόζονται σε διάνυσμα εισόδου, η έξοδος είναι ένα δισδιάστατο matrix (καλύπτεται σε επόμενη έννοια).

Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα

Μάθε την έννοια Συναρτήσεις διανυσμάτων