Πίνακας περιεχομένων:
Βίντεο: My escape from North Korea | Hyeonseo Lee 2024
Ενώ εργάζεστε με λειτουργίες στο R, μερικές φορές εργάζεστε με κάποια αντικείμενα που δεν δημιουργήσατε πρώτα στον χώρο εργασίας. Χρησιμοποιείτε τα παράθυρα x, mult και FUN σαν να είναι αντικείμενα και δημιουργείτε ένα ποσοστό του αντικειμένου μέσα στη λειτουργία που δεν μπορείτε να βρείτε πίσω στο χώρο εργασίας μετά τη χρήση της λειτουργίας. Λοιπόν τι συμβαίνει?
Δημιουργήστε μια δοκιμαστική περίπτωση
Ας μάθουμε μέσω ενός μικρού παραδείγματος. Αρχικά, δημιουργήστε ένα αντικείμενο x και μια μικρή λειτουργία test () όπως αυτή:
Η λειτουργία test () δεν κάνει πολλά. Παίρνει ένα επιχείρημα x, το εκτυπώνει στην κονσόλα, την αφαιρεί και προσπαθεί να το εκτυπώσει ξανά. Μπορεί να πιστεύετε ότι αυτή η λειτουργία θα αποτύχει, επειδή το x εξαφανίζεται μετά τη γραμμή rm (x). Αλλά όχι, αν δοκιμάσετε αυτή τη λειτουργία λειτουργεί καλά, όπως φαίνεται στο παρακάτω παράδειγμα:
Αναζήτηση στην διαδρομή
Εάν χρησιμοποιείτε μια λειτουργία, η συνάρτηση δημιουργεί πρώτα ένα προσωρινό
τοπικό περιβάλλον.
Αυτό το τοπικό περιβάλλον είναι ένθετο στο παγκόσμιο περιβάλλον, πράγμα που σημαίνει ότι από αυτό το τοπικό περιβάλλον μπορείτε επίσης να έχετε πρόσβαση σε οποιοδήποτε αντικείμενο από το παγκόσμιο περιβάλλον. Μόλις τελειώσει η λειτουργία, το τοπικό περιβάλλον καταστρέφεται μαζί με όλα τα αντικείμενα μέσα σε αυτό.
Αν καλέσετε μια συνάρτηση από το χώρο εργασίας μέσω μιας δέσμης ενεργειών ή χρησιμοποιώντας τη γραμμή εντολών, αυτό το γονικό περιβάλλον συμβαίνει να είναι το παγκόσμιο περιβάλλον. Εάν το R βλέπει κάποιο όνομα αντικειμένου που αναφέρεται σε οποιοδήποτε κώδικα της συνάρτησης, αναζητά πρώτα το τοπικό περιβάλλον. Επειδή βρίσκει ένα αντικείμενο x εκεί, χρησιμοποιεί εκείνο για την πρώτη εντολή cat (). Στην επόμενη γραμμή, το R καταργεί αυτό το αντικείμενο x. Έτσι, όταν το R φτάσει στην τρίτη γραμμή, δεν μπορεί πλέον να βρει ένα αντικείμενο x στο τοπικό περιβάλλον. Κανένα πρόβλημα. R μετακινεί τη στοίβα των περιβαλλόντων και ελέγχει για να διαπιστώσει αν βρίσκει κάτι που μοιάζει με ένα x στο παγκόσμιο περιβάλλον. Επειδή μπορεί να βρει ένα x εκεί, το χρησιμοποιεί στη δεύτερη δήλωση cat (). Εάν χρησιμοποιείτε rm () μέσα σε μια συνάρτηση, το rm (), από προεπιλογή, θα διαγράψει μόνο αντικείμενα μέσα σε αυτή τη λειτουργία.Με αυτόν τον τρόπο, μπορείτε να αποφύγετε τη διαφυγή μνήμης όταν γράφετε λειτουργίες που πρέπει να εργάζονται σε τεράστια σύνολα δεδομένων. Μπορείτε να αφαιρέσετε αμέσως τα μεγάλα προσωρινά αντικείμενα αντί να περιμένετε να το κάνει η λειτουργία στο τέλος.