Βρόχος R while με Παραδείγματα Προγραμματισμού

⚡ Έξυπνη Σύνοψη

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

  • 🔁 Βασική σύνταξη: Η συνθήκη while (condition) { expression } ελέγχει πρώτα τη συνθήκη και εκτελεί το σώμα μόνο όσο αυτή αξιολογείται ως TRUE.
  • ⚠️ Κανόνας Λήξης: Μια εντολή μέσα στο σώμα πρέπει να αλλάξει τη συνθήκη, διαφορετικά ο βρόχος δεν τελειώνει ποτέ.
  • 🔢 Μοτίβο μετρητή: Αρχικοποιήστε μια μεταβλητή πριν από τον βρόχο και αυξήστε την στο εσωτερικό της, που είναι η τυπική ιδιωματική μέθοδος μέτρησης.
  • 🛑 Έλεγχος ροής: Το break τερματίζει αμέσως τον βρόχο και το next μεταβαίνει στην επόμενη επανάληψη.
  • 🔁 επανάληψη Εναλλακτική: Η επανάληψη εκτελείται άνευ όρων και βασίζεται εξ ολοκλήρου στο break, το οποίο ταιριάζει στη λογική του στυλ do-while.
  • 📐 Πότε να επιλέξετε: Χρησιμοποιήστε την συνάρτηση while όταν ο αριθμός των επαναλήψεων είναι άγνωστος εκ των προτέρων και όταν είναι σταθερός.

Ενώ ο βρόχος στο R

Ενώ βρόχος στον προγραμματισμό R

A ενώ βρόχος στην R επαναλαμβάνει ένα μπλοκ κώδικα για όσο διάστημα η συνθήκη του παραμένει TRUE. Η συνθήκη ελέγχεται πριν κάθε πέρασμα, επομένως ένας βρόχος while μπορεί να εκτελεστεί μηδέν φορές αν η συνθήκη είναι FALSE από την αρχή.

Ενώ η Σύνταξη βρόχου στο R

Ακολουθεί η σύνταξη για τον προγραμματισμό while Loop in R:

while (condition) {
     Exp	
}

Διάγραμμα ροής R while Loop

Διάγραμμα ροής R while Loop
Διάγραμμα ροής 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
}

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

Συχνές Ερωτήσεις

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

Πατήστε Esc στο RStudio ή Ctrl+C σε ένα τερματικό για να διακόψετε την εκτέλεση. Αποτρέψτε την κατάσταση διασφαλίζοντας ότι κάποια εντολή μέσα στο σώμα αλλάζει τη συνθήκη και προσθέτοντας έναν μετρητή μέγιστης επανάληψης.

Χρησιμοποιήστε την τιμή while όταν ο αριθμός των επαναλήψεων εξαρτάται από ένα αποτέλεσμα που υπολογίζεται μέσα στον βρόχο, όπως η αναμονή για να ξεπεράσει μια τιμή ένα όριο. Χρησιμοποιήστε την τιμή όταν η ακολουθία είναι γνωστή πριν ξεκινήσει ο βρόχος.

Οι επαναληπτικοί αλγόριθμοι όπως η κλίση κατάβασης, οι k-means και η μεγιστοποίηση των προσδοκιών εκτελούνται όλοι μέχρι τη σύγκλιση και όχι για ένα σταθερό πλήθος, το οποίο είναι ακριβώς το μοτίβο while.

Ναι. Οι βοηθοί τεχνητής νοημοσύνης μπορούν να εντοπίσουν μια ενημέρωση μετρητή που λείπει ή μια συνθήκη που δεν μπορεί ποτέ να μετατραπεί σε ΨΕΥΔΗ. Να προσθέτετε πάντα μια εντολή εκτύπωσης ή ένα όριο επανάληψης για να επιβεβαιώσετε τη διάγνωση στα δικά σας δεδομένα.

Συνοψίστε αυτήν την ανάρτηση με: