Vad är en miljö i R?
Utforska miljöer som namngivna listor med pekare till överordnade miljöer.
Vad är en miljö i R? är en gratis lektion i R Academy på CoddyKit. Detta är lektion 1 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för R Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i R Academy innehåller totalt 4 lektioner.
Vad är en environment?
I R är en environment en samling namngivna bindningar (ungefär som en namngiven lista) samt en pekare till en överordnad environment. Varje variabel finns i någon environment. När R slår upp ett namn söker det först i den aktuella environmenten och går sedan uppåt i kedjan av överordnade environments.
# The global environment holds your session variables
x <- 42
cat('x is in globalenv:', exists('x', envir = globalenv()), '\n')
cat('globalenv name:', environmentName(globalenv()), '\n')globalenv(), baseenv() och emptyenv()
R har flera inbyggda environments: globalenv() är er interaktiva arbetsyta, baseenv() innehåller R:s basfunktioner och emptyenv() är toppen av kedjan utan någon överordnad environment. Varje kedja av environments avslutas till slut vid emptyenv().
cat('global :', environmentName(globalenv()), '\n')
cat('base :', environmentName(baseenv()), '\n')
cat('empty :', environmentName(emptyenv()), '\n')
cat('parent of global:', environmentName(parent.env(globalenv())), '\n')Kedjan av environments
Varje environment har exakt en överordnad environment, med undantag för emptyenv(). När R inte hittar ett namn i den aktuella environmenten går det vidare till den överordnade, sedan till dess överordnade och så vidare. Det är så R slår upp variabelnamn.
# Walk the parent chain from globalenv
env <- globalenv()
for (i in 1:5) {
cat(sprintf('Level %d: %s\n', i, environmentName(env)))
if (identical(env, emptyenv())) break
env <- parent.env(env)
}environment() för en funktion
Varje funktion har en tillhörande environment – den environment där den skapades. environment(f) returnerar denna environment. Det är funktionens omslutande environment och avgör var den letar efter fria variabler.
f <- function() 'hello'
cat('f was defined in:', environmentName(environment(f)), '\n')
# Inside a function, environment() returns its own env
show_env <- function() {
cat('my env:', environmentName(environment()), '\n')
}
show_env()as.list() på en environment
as.list(env) konverterar en environments bindningar till en namngiven lista, vilket är användbart när ni vill inspektera innehållet programmatiskt. Om ni kombinerar det med globalenv() visas alla variabler i den aktuella sessionen.
a <- 10
b <- 'hello'
c_val <- TRUE
# Show current global bindings as list
bindings <- as.list(globalenv())
cat('Names in globalenv:', paste(ls(globalenv()), collapse = ', '), '\n')ls() – Lista innehållet i en environment
ls() listar namnen som är bundna i en environment. Som standard visas den globala environmenten. Ange envir = e för att inspektera en specifik environment. Lägg till all.names = TRUE för att även ta med namn som börjar med ..
my_env <- new.env(parent = emptyenv())
my_env$x <- 1
my_env$y <- 'two'
my_env$.hidden <- TRUE
cat('Default ls:', ls(envir = my_env), '\n')
cat('All names :', ls(envir = my_env, all.names = TRUE), '\n')new.env() — Skapa miljöer
new.env(parent = e) skapar en ny tom miljö med den angivna överordnade miljön. Använd emptyenv() som överordnad miljö när Ni vill ha en helt isolerad miljö utan ärvda bindningar.
e <- new.env(parent = emptyenv())
e$name <- 'Alice'
e$score <- 95
cat('Names:', ls(e), '\n')
cat('Name binding:', e$name, '\n')Miljöer jämfört med listor
Miljöer liknar namngivna listor men fungerar annorlunda: de ändras alltid på plats (ingen kopiering vid ändring), de har en överordnad miljö och namn slås upp med en hashtabell (vilket är snabbt). Listor kopieras när de ändras, men miljöer gör det inte.
# Environments are reference objects (no copy-on-modify)
e <- new.env(parent = emptyenv())
e$x <- 1
f <- e # f points to same env, not a copy
f$x <- 99
cat('e$x after modifying through f:', e$x, '\n')exists() och get() i en miljö
exists('name', envir = e) kontrollerar om ett namn är bundet i en miljö (eller i dess överordnade miljöer som standard). get('name', envir = e) hämtar värdet. Båda accepterar inherits = FALSE för att endast söka i den angivna miljön.
e <- new.env(parent = emptyenv())
e$pi_approx <- 3.14159
cat('exists pi_approx:', exists('pi_approx', envir = e), '\n')
cat('exists missing: ', exists('missing_var', envir = e), '\n')
cat('get pi_approx: ', get('pi_approx', envir = e), '\n')environmentName() för inbyggda miljöer
environmentName(env) returnerar ett läsbart namn för särskilda miljöer. Egenskapade miljöer returnerar '' (en tom sträng). Detta hjälper Er att spåra var variabler definierades vid felsökning.
cat(environmentName(globalenv()), '\n') # R_GlobalEnv
cat(environmentName(baseenv()), '\n') # package:base
cat(environmentName(emptyenv()), '\n') # R_EmptyEnv
e <- new.env(parent = emptyenv())
cat('User env name: "', environmentName(e), '"\n', sep = '')Praktiskt: använda miljöer som cacheminnen
Eftersom miljöer ändras på plats fungerar de bra som föränderliga cacheminnen eller hashtabeller. Lagra beräknade resultat i en miljö för att slippa beräkna om dem — detta är snabbare än att ändra en lista (som kopieras).
cache <- new.env(parent = emptyenv(), hash = TRUE)
cached_square <- function(n) {
key <- as.character(n)
if (exists(key, envir = cache, inherits = FALSE))
return(get(key, envir = cache))
result <- n^2
assign(key, result, envir = cache)
result
}
cat(cached_square(7), '\n')
cat(cached_square(7), '\n') # served from cacheSnabb kontroll
Vilken är den översta miljön i R:s miljökedja — den som inte har någon överordnad miljö?
Miljöer: viktigaste punkterna
Viktigaste punkterna om R-miljöer:
- En miljö = namngivna bindningar + en pekare till den överordnade miljön
globalenv()= Er arbetsyta;baseenv()= base R;emptyenv()= kedjans slut- Namn slås upp genom den överordnade kedjan tills de hittas eller
emptyenv()nås ls(envir=e)listar bindningar;exists()kontrollerar;get()hämtar- Miljöer är referensobjekt — de kopieras inte vid ändring
new.env(parent=emptyenv())skapar en isolerad miljö
e <- new.env(parent = emptyenv())
assign('counter', 0L, envir = e)
for (i in 1:5) assign('counter', e$counter + 1L, envir = e)
cat('Counter:', e$counter, '\n')
cat('Env name:', environmentName(e), '\n')
cat('Bindings:', ls(e), '\n')Lär dig R med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 43
- Lektioner
- 159
Vanliga frågor
Är lektionen ”Vad är en miljö i R?” gratis?
Ja – du kan läsa vilka 3 lektioner som helst i lärvägen R Academy, inklusive ”Vad är en miljö i R?”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i R Academy innehåller totalt 4 lektioner.
Vad lär jag mig i ”Vad är en miljö i R?”?
Utforska miljöer som namngivna listor med pekare till överordnade miljöer. Ni övar på R Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig R Academy?
Du behöver inga förkunskaper. Utbildningen i R Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 1 av 4.
Hur lång tid tar lektionen ”Vad är en miljö i R?”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här R Academy-lektionen?
Ja. Varje R Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- Vad är en miljö i R?
- Regler för lexikal scopning
- Global kontra lokal scope
- Skapa och inspektera miljöer