Βίντεο: The Brachistochrone, with Steven Strogatz 2024
αλλά πάνω από τους δείκτες. Για να το κάνετε αυτό, μπορείτε να αντικαταστήσετε το μεσαίο τμήμα της λειτουργίας με τον ακόλουθο κώδικα:
nclient <- μήκος (πελάτης) ΦΠΑ <- αριθμητικό (nclient) για (i in seq_along (client) {i>, private = 1, 12, public = 1, 06, 1)}}
Εδώ είναι μερικές διαφορές από τη χρήση τιμών του διανύσματος για looping:
-
Ορίζετε το μήκος του προγράμματος-πελάτη φορέα στη μεταβλητή nclient.
-
Κατόπιν κάνετε έναν Φ.Α. φορέα που είναι ακριβώς όσο ο φορέας του φορέα. Αυτό ονομάζεται προ-κατανομή ενός διανύσματος.
-
Τότε βγάζετε τους δείκτες του πελάτη αντί του ίδιου του διανύσματος χρησιμοποιώντας τη συνάρτηση seq_along (). Στο πρώτο πέρασμα μέσω του βρόχου, η πρώτη τιμή στο ΦΠΑ ορίζεται ως το αποτέλεσμα του διακόπτη () που εφαρμόζεται στην πρώτη τιμή στον πελάτη. Στο δεύτερο πέρασμα, η δεύτερη τιμή του ΦΠΑ είναι το αποτέλεσμα του διακόπτη () που εφαρμόζεται στη δεύτερη τιμή στον πελάτη και ούτω καθεξής.
Μπορεί να μπείτε στον πειρασμό να αντικαταστήσετε το seq_along (client) με το διάνυσμα 1: nclient, αλλά αυτό θα ήταν κακή ιδέα. Εάν ο πελάτης φορέα έχει μήκος 0, το seq_along (πελάτης) δημιουργεί ένα κενό διάνυσμα και ο κώδικας στον βρόχο δεν εκτελείται ποτέ. Εάν χρησιμοποιείτε 1: nclient, το R δημιουργεί ένα διάνυσμα c (1, 0) και ένα βρόχο πάνω από αυτές τις δύο τιμές, δίνοντάς σας ένα εντελώς λάθος αποτέλεσμα.
Κάθε φορά που επιμηκύνατε ένα αντικείμενο στο R, το R πρέπει να αντιγράψει ολόκληρο το αντικείμενο και να το μετακινήσει σε μια νέα θέση στη μνήμη. Αυτό έχει δύο επιδράσεις:
-
Πρώτον, επιβραδύνει τον κωδικό σας, επειδή όλη η αντιγραφή χρειάζεται χρόνο.
-
Δεύτερον, καθώς το R μετακινεί συνεχώς τα πράγματα στη μνήμη, αυτή η μνήμη χωρίζεται σε πολλούς μικρούς χώρους.
Αυτό ονομάζεται κατακερματισμός , και καθιστά την επικοινωνία μεταξύ R και μνήμης λιγότερο ομαλή. Μπορείτε να αποφύγετε αυτόν τον κατακερματισμό με μνήμη όπως προηγουμένως.