Hvordan til at krydse grænser i R

Når du arbejder med funktioner i R, nogle gange, du arbejder med nogle objekter som du didnâ € t først oprette i arbejdsområdet. Du bruger argumenter X, mult og sjov, som om de? € re objekter, og du opretter et objekt procent inden for den funktion, du canâ € t finde tilbage i arbejdsområdet efter brug af funktionen. Så whatâ € s sker der?

Opret en prøvesag

Lad os € s finde ud gennem et lille eksempel. Først skal du oprette et objekt x og en lille test () funktion som dette:

x <- 1: 5
test <- funktion (x) {
cat ("Dette er x:", x, "\ n")
rm (x)
cat ("Dette er x efter at fjerne det:", x, "\ n")
}

Testen () funktion doesnâ € t gøre meget. Det tager et argument x, udskriver det til konsollen, fjerner det, og forsøger at udskrive den igen. Du tror måske, denne funktion vil mislykkes, fordi x forsvinder efter den linje rm (x). Men nej, hvis du prøver denne funktion det fungerer fint, som vist i følgende eksempel:

> Test (5: 1)
Dette er x: 5 4 3 2 1
Det er X efter at fjerne det: 1 2 3 4 5

Selv efter fjernelse af x, R stadig kan finde en anden X, at det kan udskrive. Hvis du ser lidt nærmere, det tydeligt, at x er trykt i den anden linje er faktisk ikke den, du gav som argument, men x du oprettede før i arbejdsområdet. Hvordan kan det være?

Søg stien

Hvis du bruger en funktion, funktionen først opretter en midlertidig lokale miljø. Denne lokale miljø indlejret i det globale miljø, hvilket betyder, at der fra det lokale miljø, du også kan få adgang til ethvert objekt fra det globale miljø. Så snart funktionen slutter, er det lokale miljø ødelagt sammen med alle objekter i det.

For at være helt korrekt, en funktion skaber altid et miljø inden for miljø ita € s kaldes fra, kaldes forælder miljø. Hvis du kalder en funktion fra arbejdsområdet gennem et script eller bruge kommandolinjen, sker denne forælder miljø at være den globale miljø.

Hvis R ser ethvert objekt navn nævnt i nogen kode i funktionen, er det først søger det lokale miljø. Fordi det finder et objekt x der, det bruger, at man for første kat () erklæring. I næste linje, R fjerner det objekt x. Så når R når den tredje linje, canâ det € t finde et objekt x i lokalmiljøet længere. Intet problem. R bevæger sig op i stakken af ​​miljøer og kontrol for at se, om den finder noget ligne et X i det globale miljø. Fordi det kan finde en x der, det bruger, at man i den anden kat () erklæring.

Hvis du bruger rm () inde i en funktion, rm (), vil som standard kun slette objekter i denne funktion. På denne måde kan du undgå at løbe tør for hukommelse, når du skriver funktioner, som skal arbejde på store datasæt. Du kan straks fjerne store midlertidige objekter i stedet for at vente på den funktion at gøre det i slutningen.


© 2019 Zajacperrone.com | Contact us: webmaster# zajacperrone.com