Αυτή είναι μια μεγάλη έννοια στην R. Για να καταλάβεις τις δυνατότητες, είναι χρήσιμο να σκεφτείς το πλήθος των διαστάσεων στην είσοδο και την έξοδο των διάφορων συναρτήσεων.
Έχουμε ήδη δει συναρτήσεις που παίρνουν ένα διάνυσμα και επιστρέφουν μία μόνο τιμή, σαν βαθμωτό μέγεθος:
> v <- 1:5
> length(v)
#> [1] 5
> sum(v)
#> [1] 15
Πολλές στατιστικές συναρτήσεις ανήκουν επίσης σε αυτή την κατηγορία, όπως η mean().
Για λογικά διανύσματα, υπάρχουν οι all() και any().
Πολλές συναρτήσεις στην R λειτουργούν πάνω σε ολόκληρα διανύσματα, δίνοντας συχνά διάνυσμα ως έξοδο. Σε αυτές περιλαμβάνονται οι περισσότερες μαθηματικές συναρτήσεις:
> sq <- c(4, 9, 16, 25)
> sqrt(sq) # square root
#> [1] 2 3 4 5
Αυτό δεν είναι απλώς συνοπτικό και βολικό, καθώς αποφεύγεις την ανάγκη για βρόχους, περιεκτικές λίστες ή αναδρομή, που είναι συνηθισμένες σε άλλες γλώσσες. Στην R, οι διανυσματικές συναρτήσεις συχνά εκτελούνται πολύ πιο γρήγορα από αυτές τις τεχνικές.
Για την ταξινόμηση ενός διανύσματος, υπάρχει η 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(1:5)
#> [1] 1 3 6 10 15 # sums
> cumprod(1:5)
#> [1] 1 2 6 24 120 # equivalent to factorials
Μια επέκταση αυτής της έννοιας μπορεί επίσης να χρησιμοποιηθεί για τη σύγκριση διανυσμάτων.
Για παράδειγμα, δες τη συνάρτηση μέγιστου ανά ζεύγος pmax():
> v
#> [1] 2 7 9
> w
#> [1] 3 1 5
> pmax(v, w)
#> [1] 3 7 9 # max of each pairwise comparison
Είσαι ένας φανατικός παρατηρητής πουλιών που καταγράφει πόσα πουλιά έχουν επισκεφτεί τον κήπο σου τις τελευταίες επτά ημέρες.
Έχεις έξι εργασίες, όλες σχετικές με τον αριθμό των πουλιών που επισκέφτηκαν τον κήπο σου.
Υλοποίησε τη συνάρτηση today() ώστε να επιστρέφει πόσα πουλιά επισκέφτηκαν τον κήπο σου σήμερα. Οι μετρήσεις των πουλιών είναι ταξινομημένες ανά ημέρα, με το πρώτο στοιχείο να είναι η μέτρηση της παλαιότερης ημέρας και το τελευταίο στοιχείο τη σημερινή μέτρηση.
birds_per_day <- c(2, 5, 0, 7, 4, 1)
today(birds_per_day)
# => 1
Υλοποίησε τη συνάρτηση increment_todays_count() για να αυξήσεις τη σημερινή μέτρηση:
birds_per_day <- c(2, 5, 0, 7, 4, 1)
increment_todays_count(birds_per_day)
# => c(2, 5, 0, 7, 4, 2)
Υλοποίησε τη συνάρτηση has_day_without_birds() που επιστρέφει TRUE αν υπήρξε μέρα κατά την οποία μηδέν πουλιά επισκέφτηκαν τον κήπο· διαφορετικά, επέστρεψε FALSE:
birds_per_day <- c(2, 5, 0, 7, 4, 1)
has_day_without_birds(birds_per_day)
# => true
Υλοποίησε τη συνάρτηση count_for_first_days() που επιστρέφει τον αριθμό των πουλιών που έχουν επισκεφτεί τον κήπο σου από την αρχή της εβδομάδας, αλλά περιόρισε τη μέτρηση στον καθορισμένο αριθμό ημερών από την αρχή της εβδομάδας.
birds_per_day <- c(2, 5, 0, 7, 4, 1)
count_for_first_days(birds_per_day, 4)
# => 14
Κάποιες μέρες είναι πιο πολυάσχολες από άλλες. Πολυάσχολη μέρα είναι εκείνη κατά την οποία πέντε ή περισσότερα πουλιά έχουν επισκεφτεί τον κήπο σου.
Υλοποίησε τη συνάρτηση busy_days() για να επιστρέφεις τον αριθμό των πολυάσχολων ημερών:
birds_per_day <- c(2, 5, 0, 7, 4, 1)
busy_days(birds_per_day)
# => 2
Είσαι περίεργος να μάθεις πόσα πουλιά συνολικά έχουν επισκεφτεί μέχρι στιγμής αυτή την εβδομάδα. Υπολόγισε τα αθροιστικά σύνολα για κάθε ημέρα.
running_total(c(7, 6, 5, 4, 3, 2, 1))
#> [1] 7 13 18 22 25 27 28
Υποψιάζεσαι ότι οι επισκέψεις των πουλιών επηρεάζονται από τα μοτίβα της κοντινής κυκλοφορίας στους δρόμους, και έτσι διαφέρουν τα σαββατοκύριακα έναντι των καθημερινών.
Ταξινόμησε τις συντομογραφίες των ημερών σε φθίνουσα σειρά ανάλογα με το πόσα πουλιά επισκέφτηκαν.
day_names <- c("Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun")
birds_per_day <- c(5, 2, 4, 6, 0, 9, 8)
busy_days_of_week(birds_per_day, day_names)
#> [1] "Sat" "Sun" "Thu" "Mon" "Wed" "Tue" "Fri"
Γράψου στο Exercism για να μάθεις και να κατακτήσεις R με 21 έννοιες111 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.