Innholdsfortegnelse:
Video: Comment tracer et couper un arrondi sur un carrelage (pose diagonale) 2024
Mens du arbeider med funksjoner i R, jobber du noen ganger med noen objekter du ikke først opprettet i arbeidsområdet. Du bruker argumentene x, mult og FUN som om de er objekter, og du lager en objektprosent i funksjonen som du ikke finner igjen i arbeidsområdet etter bruk av funksjonen. Så hva skjer?
Lag et testfall
La oss finne ut gjennom et lite eksempel. Først oppretter du et objekt x og en liten test () -funksjon som denne:
x <- 1: 5 test <- funksjon (x) {cat ("Dette er x:", x, "n") rm (x) cat det: ", x," n ")}
Testen () -funksjonen gjør ikke mye. Det tar et argument x, skriver det ut til konsollen, fjerner det, og prøver å skrive det ut igjen. Du tror kanskje denne funksjonen vil mislykkes, fordi x forsvinner etter linjen rm (x). Men nei, hvis du prøver denne funksjonen, virker det bra, som vist i følgende eksempel:
Selv etter at du har fjernet x, kan R fremdeles finne en annen x at den kan skrive ut. Hvis du ser litt nærmere ut, ser du at x som er skrevet i den andre linjen, egentlig ikke er den du ga som et argument, men x du opprettet tidligere i arbeidsområdet. Hvorfor det?
Søk på banen
Hvis du bruker en funksjon, oppretter funksjonen først et midlertidig
lokalt miljø. Dette lokale miljøet er nestet i det globale miljøet, noe som betyr at du fra det lokale miljøet også kan få tilgang til ethvert objekt fra det globale miljøet. Så snart funksjonen avsluttes, blir lokalt miljø ødelagt sammen med alle objekter i den.
foreldremiljøet. Hvis du ringer en funksjon fra arbeidsområdet gjennom et skript eller ved hjelp av kommandolinjen, er dette foreldre miljøet det globale miljøet. Hvis R ser et objektnavn som er nevnt i en hvilken som helst kode i funksjonen, søker den først i det lokale miljøet. Fordi det finner et objekt x der, bruker den den for den første katten () -klæringen. I neste linje fjerner R det objektet x. Så når R når den tredje linjen, kan den ikke finne et objekt x i lokalmiljøet lenger. Ikke noe problem. R beveger seg opp i stabelen av miljøer og sjekker for å se om den finner noe som ligner en x i det globale miljøet. Fordi det kan finne en x der, bruker den den i den andre katten () setningen.
Hvis du bruker rm () i en funksjon, vil rm () som standard slette kun objekter innenfor den funksjonen.På denne måten kan du unngå å gå tom for minne når du skriver funksjoner som må fungere på store datasett. Du kan umiddelbart fjerne store midlertidige objekter i stedet for å vente på at funksjonen skal gjøre det på slutten.