Διαδρομές
/
R
R
/
Ασκήσεις
/
Παρατηρητής πουλιών
Παρατηρητής πουλιών

Παρατηρητής πουλιών

Άσκηση εκμάθησης

Εισαγωγή

Αυτή είναι μια μεγάλη έννοια στην 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

Οδηγίες

Είσαι ένας φανατικός παρατηρητής πουλιών που καταγράφει πόσα πουλιά έχουν επισκεφτεί τον κήπο σου τις τελευταίες επτά ημέρες.

Έχεις έξι εργασίες, όλες σχετικές με τον αριθμό των πουλιών που επισκέφτηκαν τον κήπο σου.

1. Έλεγξε πόσα πουλιά επισκέφτηκαν σήμερα

Υλοποίησε τη συνάρτηση today() ώστε να επιστρέφει πόσα πουλιά επισκέφτηκαν τον κήπο σου σήμερα. Οι μετρήσεις των πουλιών είναι ταξινομημένες ανά ημέρα, με το πρώτο στοιχείο να είναι η μέτρηση της παλαιότερης ημέρας και το τελευταίο στοιχείο τη σημερινή μέτρηση.

birds_per_day <- c(2, 5, 0, 7, 4, 1)
today(birds_per_day)
# => 1

2. Αύξησε τη σημερινή μέτρηση

Υλοποίησε τη συνάρτηση 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)

3. Έλεγξε αν υπήρξε μέρα χωρίς επισκέψεις πουλιών

Υλοποίησε τη συνάρτηση has_day_without_birds() που επιστρέφει TRUE αν υπήρξε μέρα κατά την οποία μηδέν πουλιά επισκέφτηκαν τον κήπο· διαφορετικά, επέστρεψε FALSE:

birds_per_day <- c(2, 5, 0, 7, 4, 1)
has_day_without_birds(birds_per_day)
# => true

4. Υπολόγισε τον αριθμό των πουλιών που επισκέφτηκαν τον κήπο για τις πρώτες ημέρες

Υλοποίησε τη συνάρτηση count_for_first_days() που επιστρέφει τον αριθμό των πουλιών που έχουν επισκεφτεί τον κήπο σου από την αρχή της εβδομάδας, αλλά περιόρισε τη μέτρηση στον καθορισμένο αριθμό ημερών από την αρχή της εβδομάδας.

birds_per_day <- c(2, 5, 0, 7, 4, 1)
count_for_first_days(birds_per_day, 4)
# => 14

5. Υπολόγισε τον αριθμό των πολυάσχολων ημερών

Κάποιες μέρες είναι πιο πολυάσχολες από άλλες. Πολυάσχολη μέρα είναι εκείνη κατά την οποία πέντε ή περισσότερα πουλιά έχουν επισκεφτεί τον κήπο σου. Υλοποίησε τη συνάρτηση busy_days() για να επιστρέφεις τον αριθμό των πολυάσχολων ημερών:

birds_per_day <- c(2, 5, 0, 7, 4, 1)
busy_days(birds_per_day)
# => 2

6. Υπολόγισε το τρέχον σύνολο των επισκέψεων πουλιών την τελευταία εβδομάδα

Είσαι περίεργος να μάθεις πόσα πουλιά συνολικά έχουν επισκεφτεί μέχρι στιγμής αυτή την εβδομάδα. Υπολόγισε τα αθροιστικά σύνολα για κάθε ημέρα.

running_total(c(7, 6, 5, 4, 3, 2, 1))
#> [1]  7 13 18 22 25 27 28

7. Ταξινόμησε τα ονόματα των ημερών κατά το πόσο πολυάσχολες είναι

Υποψιάζεσαι ότι οι επισκέψεις των πουλιών επηρεάζονται από τα μοτίβα της κοντινής κυκλοφορίας στους δρόμους, και έτσι διαφέρουν τα σαββατοκύριακα έναντι των καθημερινών.

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

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"
Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
R Exercism

Έτοιμος να ξεκινήσεις την άσκηση Παρατηρητής πουλιών;

Γράψου στο Exercism για να μάθεις και να κατακτήσεις R με 21 έννοιες111 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.