Innehållsförteckning:
Video: Living Without 3 Chromosomes (Only 10 Known Cases Ever) 2024
När du arbetar med funktioner i R arbetar du ibland med vissa objekt som du inte först skapade i arbetsytan. Du använder argumenten x, mult och FUN som om de är objekt och du skapar ett objektprocent i funktionen som du inte kan hitta tillbaka i arbetsytan efter att du har använt funktionen. Så vad händer?
Skapa ett testfall
Låt oss ta reda på genom ett litet exempel. Skapa först ett objekt x och ett litet test () -funktion så här:
x <- 1: 5 test <- funktion (x) {cat ("Detta är x:", x, "n") rm (x) katt det: ", x," n ")}
Funktionen test () gör inte mycket. Det tar ett argument x, skriver ut det till konsolen, tar bort det och försöker skriva ut det igen. Du kanske tror att den här funktionen kommer att misslyckas, eftersom x försvinner efter raden rm (x). Men nej, om du försöker denna funktion fungerar det bara bra, som visas i följande exempel:
Även efter att ha tagit bort x kan R fortfarande hitta en annan x att den kan skriva ut. Om du ser lite närmare ser du att x som skrivs ut i den andra raden faktiskt inte är den du gav som argument, men x du skapade tidigare i arbetsytan. Hurså?
Sök på sökvägen
Om du använder en funktion skapar funktionen först en tillfällig
lokal miljö. Den här miljön är nestad inom den globala miljön, vilket innebär att du från den lokala miljön också kan komma åt något objekt från den globala miljön. Så snart funktionen slutar förstörs den lokala miljön tillsammans med alla objekt i den.
föräldermiljö. Om du ringer en funktion från arbetsytan via ett skript eller med kommandoraden råkar den här modermiljön vara den globala miljön. Om R ser något objektnamn som nämns i någon kod i funktionen, söker den först i den lokala miljön. Eftersom det finns ett objekt x där använder den den för den första katten () -uppsättningen. I nästa rad tar R bort det objektet x. Så när R når tredje raden, kan det inte längre hitta ett objekt x i den lokala miljön. Inga problem. R rör sig upp i miljön och kontrollerar om det ser något som ser ut som en x i den globala miljön. Eftersom det kan hitta en x där använder den den i den andra katten () -satsen.
Om du använder rm () i en funktion, kommer rm () som standard att radera endast objekt inom den funktionen.På det här sättet kan du undvika att gå ur minne när du skriver funktioner som måste fungera på enorma dataset. Du kan omedelbart ta bort stora temporära objekt istället för att vänta på att funktionen ska göra det i slutet.