Βρόχος R while με Παραδείγματα Προγραμματισμού
⚡ Έξυπνη Σύνοψη
Ενώ ο βρόχος στον προγραμματισμό R επαναλαμβάνει ένα μπλοκ κώδικα για όσο διάστημα η συνθήκη του παραμένει TRUE (αληθής). Η συνθήκη ελέγχεται πριν από κάθε πέρασμα, επομένως το σώμα μπορεί να μην εκτελεστεί ποτέ και κάτι μέσα σε αυτό πρέπει τελικά να κάνει τη συνθήκη FALSE (ψευδής).

Ενώ βρόχος στον προγραμματισμό R
A ενώ βρόχος στην R επαναλαμβάνει ένα μπλοκ κώδικα για όσο διάστημα η συνθήκη του παραμένει TRUE. Η συνθήκη ελέγχεται πριν κάθε πέρασμα, επομένως ένας βρόχος while μπορεί να εκτελεστεί μηδέν φορές αν η συνθήκη είναι FALSE από την αρχή.
Ενώ η Σύνταξη βρόχου στο R
Ακολουθεί η σύνταξη για τον προγραμματισμό while Loop in R:
while (condition) {
Exp
}
Διάγραμμα ροής R while Loop

Σημείωση: κάτι μέσα στον βρόχο πρέπει τελικά να κάνει τη συνθήκη FALSE. Εάν δεν συμβεί τίποτα, ο βρόχος εκτελείται για πάντα και πρέπει να διακόψετε την R με Esc ή Ctrl+C.
ενώ Βρόχος vs για Βρόχος vs επανάληψη Βρόχος σε R
Το R προσφέρει τρεις τουαλέτεςping δομές και η επιλογή μεταξύ τους εξαρτάται από το αν γνωρίζετε εκ των προτέρων πόσες επαναλήψεις χρειάζεστε.
| Κριτήρια | ενώ | για | επαναλαμβάνω |
|---|---|---|---|
| Αριθμός επαναλήψεων | Άγνωστο εκ των προτέρων | Γνωστό εκ των προτέρων | Άγνωστο εκ των προτέρων |
| Κατάσταση που δοκιμάστηκε | Πριν από κάθε πέρασμα | Η ακολουθία έχει εξαντληθεί | Ποτέ, πρέπει να καλέσεις διάλειμμα |
| Ελάχιστες διαδρομές | Μηδέν | Μηδέν | Ένας |
| Τυπική χρήση | Συγκλίνοντας σε ένα κατώφλι | Περπατώντας σε ένα διάνυσμα ή μια λίστα | Λογική στυλ Do-while |
| Σύνταξη | ενώ (συνθήκη) { } | για (i σε v) { } | επανάληψη { … διάλειμμα } |
# repeat always runs at least once count <- 1 repeat { print(count) count <- count + 1 if (count > 5) break }
Το παραπάνω παράδειγμα μετοχής είναι μια φυσική επιλογή για το "while": δεν μπορείτε να γνωρίζετε εκ των προτέρων πόσες τυχαίες κληρώσεις θα χρειαστούν πριν η τιμή πέσει στο 45.
Βρόχος While σε R: Παραδείγματα
Παράδειγμα 1
Ξεκινήστε με το πιο απλό δυνατό Προγραμματισμός R παράδειγμα. Δημιουργείτε έναν μετρητή και προσθέτετε 1 σε αυτόν σε κάθε πέρασμα. Ο βρόχος πρέπει να μπορεί να τερματιστεί, επομένως η συνθήκη λέει ρητά στην R να σταματήσει μόλις η μεταβλητή περάσει το 10.
Σημείωση: Εάν θέλετε να δείτε την τρέχουσα τιμή βρόχου, πρέπει να τυλίξετε τη μεταβλητή μέσα στη συνάρτηση print().
#Create a variable with value 1 begin <- 1 #Create the loop while (begin <= 10){ #See which loop we are on cat('This is loop number', begin, '\n') #add 1 to the variable begin after each loop begin <- begin+1 print(begin) }
Παραγωγή:
## This is loop number 1[1] 2 ## This is loop number 2[1] 3 ## This is loop number 3[1] 4 ## This is loop number 4[1] 5 ## This is loop number 5[1] 6 ## This is loop number 6[1] 7 ## This is loop number 7[1] 8 ## This is loop number 8[1] 9 ## This is loop number 9[1] 10 ## This is loop number 10[1] 11
Παράδειγμα 2
Ας υποθέσουμε ότι αγοράσατε μια μετοχή στα 50 δολάρια. Αν η τιμή πέσει στα 45 δολάρια ή χαμηλότερα, θέλετε να την θέσετε σε short, διαφορετικά συνεχίζετε να την κρατάτε. Κάθε πέρασμα του βρόχου μετακινεί την τιμή τυχαία έως και 10 δολάρια προς οποιαδήποτε κατεύθυνση γύρω στα 50 δολάρια:
set.seed(123) # Set variable stock and price stock <- 50 price <- 50 # Loop variable counts the number of loops loop <- 1 # Set the while statement while (price > 45){ # Create a random price between 40 and 60 price <- stock + sample(-10:10, 1) # Count the number of loop loop <- loop + 1 # Print the number of loop print(loop) }
Παραγωγή:
## [1] 2 ## [1] 3 ## [1] 4 ## [1] 5 ## [1] 6 ## [1] 7
cat('it took',loop,'loop before we short the price. The lowest price is',price)
Παραγωγή:
## it took 7 loop before we short the price. The lowest price is 40
Πώς να χρησιμοποιήσετε το break και το next σε έναν βρόχο While
Δύο λέξεις-κλειδιά αλλάζουν την κανονική ροή οποιουδήποτε βρόχου R.
- σπάσει βγαίνει αμέσως από τον βρόχο, παραλείψτεping κάθε υπόλοιπη επανάληψη.
- επόμενη εγκαταλείπει μόνο την τρέχουσα επανάληψη και μεταβαίνει κατευθείαν στην επόμενη δοκιμή συνθήκης.
# break: stop as soon as a condition is met i <- 1 while (i <= 100) { if (i * i > 50) { cat('First square above 50 is', i * i, '\n') break } i <- i + 1 } # next: skip the even numbers i <- 0 while (i < 10) { i <- i + 1 if (i %% 2 == 0) next print(i) }
Μια παγίδα που αξίζει να γνωρίζετε. Σε έναν βρόχο while, το next μεταπηδά πίσω στον έλεγχο συνθήκης without εκτελώντας οτιδήποτε κάτω από αυτό. Εάν ο μετρητής σας αυξάνεται στο κάτω μέρος του σώματος, το επόμενο παραλείπει αυτήν την αύξηση και ο βρόχος κολλάει για πάντα. Γι' αυτό το δεύτερο παράδειγμα αυξάνει πριν την επόμενη πρόταση αντί για μετά από αυτήν.
Συνηθισμένα σφάλματα βρόχου While και άπειροι βρόχοι
Τέσσερα λάθη ευθύνονται σχεδόν για κάθε αποτυχημένο βρόχο while.
- Ο μετρητής δεν ενημερώνεται ποτέ. Αν ξεχάσετε την αύξηση, η συνθήκη θα παραμείνει μόνιμα αληθής. Πατήστε Esc στο RStudio ή Ctrl+C σε ένα τερματικό για να διακόψετε.
- Η συνθήκη επιστρέφει NA. Εάν οποιαδήποτε τιμή στη δοκιμή είναι NA, η R σταματά με τη φράση «λείπει τιμή όπου απαιτείται TRUE/FALSE». Προστατέψτε την με is.na() ή με isTRUE().
- Η συνθήκη έχει διάρκεια μεγαλύτερη από ένα στοιχείο. Από την R 4.2, μια συνθήκη μήκους μεγαλύτερου από ένα είναι σφάλμα και όχι προειδοποίηση. Τυλίξτε την σε any() ή all().
- Η σύγκριση κινητής υποδιαστολής δεν γίνεται ποτέ ΛΑΘΟΣ. ενώ το (x != 0.3) μπορεί να επαναλαμβάνεται επ' αόριστον επειδή το 0.1 + 0.2 δεν είναι ακριβώς 0.3. Συγκρίνετε με μια ανοχή, χρησιμοποιώντας abs(x – 0.3) > 1e-8.
# Safety valve: cap the number of iterations iter <- 0 while (price > 45 && iter < 1000) { price <- stock + sample(-10:10, 1) iter <- iter + 1 }
Η προσθήκη ενός μέγιστου αριθμού επαναλήψεων είναι μια φθηνή ασφάλιση σε οποιονδήποτε βρόχο του οποίου η έξοδος εξαρτάται από τυχαία ή εξωτερικά δεδομένα.
