Mikä ympäristö on R:ssä?
Tutustukaa ympäristöihin nimettyinä listoina, joilla on viittaukset isäntäympäristöihin.
Mikä ympäristö on R:ssä? on ilmainen R Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu R Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. R Academy-kurssilla on yhteensä 4 oppituntia.
Mikä on ympäristö?
R:ssä ympäristö on nimettyjen sidosten kokoelma (nimetyn listan kaltainen) sekä osoitin isäntäympäristöön. Jokainen muuttuja sijaitsee jossakin ympäristössä. Kun R etsii nimeä, se tarkistaa ensin nykyisen ympäristön ja etenee sitten isäntäketjua ylöspäin.
# 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() ja emptyenv()
R:ssä on useita valmiita ympäristöjä: globalenv() on interaktiivinen työtila, baseenv() sisältää R:n perusfunktiot ja emptyenv() on ketjun ylin ympäristö, jolla ei ole isäntää. Jokainen ympäristöketju päättyy lopulta ympäristöön 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')Ympäristöketju
Jokaisella ympäristöllä on täsmälleen yksi isäntä, lukuun ottamatta ympäristöä emptyenv(). Kun R ei löydä nimeä nykyisestä ympäristöstä, se siirtyy isäntäympäristöön, sitten tämän isäntäympäristöön ja niin edelleen. Näin R ratkaisee muuttujien nimet.
# 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() funktiolle
Jokaisella funktiolla on siihen liittyvä ympäristö — se ympäristö, jossa funktio luotiin. environment(f) palauttaa kyseisen ympäristön. Se on funktion sulkeuma-ympäristö ja määrittää, mistä funktio etsii vapaita muuttujia.
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() ympäristölle
as.list(env) muuntaa ympäristön sidokset nimetyksi listaksi, mikä helpottaa sen sisällön ohjelmallista tarkastelua. Yhdistämällä sen funktioon globalenv() näet kaikki nykyisen istunnon muuttujat.
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() — ympäristön sisällön luetteleminen
ls() luettelee ympäristöön sidotut nimet. Oletusarvoisesti se näyttää globaalin ympäristön nimet. Välitä parametriksi envir = e tietyn ympäristön tarkastelemiseksi. Lisää all.names = TRUE, jos haluat mukaan myös nimet, jotka alkavat merkillä ..
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() — Ympäristöjen luominen
new.env(parent = e) luo uuden tyhjän ympäristön, jolla on annettu isäntäympäristö. Käyttäkää isäntänä emptyenv()-ympäristöä, kun haluatte täysin eristetyn ympäristön ilman perittyjä sidontoja.
e <- new.env(parent = emptyenv())
e$name <- 'Alice'
e$score <- 95
cat('Names:', ls(e), '\n')
cat('Name binding:', e$name, '\n')Ympäristöt ja listat
Ympäristöt näyttävät nimetyiltä listoilta, mutta toimivat eri tavalla: niitä muokataan aina suoraan (niitä ei kopioida muokkauksen yhteydessä), niillä on isäntäympäristö, ja nimien haku tehdään hajautustaulun avulla (nopeasti). Listat kopioidaan niitä muokattaessa, ympäristöjä ei.
# 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() ja get() ympäristössä
exists('name', envir = e) tarkistaa, onko nimi sidottu ympäristöön (oletusarvoisesti myös sen isäntäympäristöihin). get('name', envir = e) noutaa arvon. Molemmat hyväksyvät argumentin inherits = FALSE, jolloin haku tehdään vain määritetystä ympäristöstä.
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() sisäänrakennetuille ympäristöille
environmentName(env) palauttaa erityisten ympäristöjen ihmisluettavan nimen. Käyttäjän luomille ympäristöille palautetaan '' (tyhjä merkkijono). Tämä auttaa jäljittämään, missä muuttujat määriteltiin virheenkorjauksen aikana.
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 = '')Käytännössä: ympäristöjen käyttäminen välimuisteina
Koska ympäristöjä muokataan suoraan, ne sopivat hyvin muuttuviin välimuisteihin tai hajautustauluihin. Tallentakaa lasketut tulokset ympäristöön, jotta niitä ei tarvitse laskea uudelleen — tämä on nopeampaa kuin listan muokkaaminen (joka aiheuttaa kopioinnin).
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 cachePikatarkistus
Mikä on R:n ympäristöketjun ylimmän tason ympäristö — se, jolla ei ole isäntäympäristöä?
Ympäristöt: tärkeimmät opit
R:n ympäristöjen tärkeimmät opit:
- Ympäristö = nimetyt sidonnat + osoitin isäntäympäristöön
globalenv()= työtilanne;baseenv()= R:n perusympäristö;emptyenv()= ketjun päätepiste- Nimihaku etenee isäntäketjua pitkin, kunnes nimi löytyy tai saavutetaan
emptyenv() ls(envir=e)luettelee sidonnat;exists()tarkistaa;get()noutaa- Ympäristöt ovat viiteobjekteja — niitä ei kopioida muokkauksen yhteydessä
new.env(parent=emptyenv())luo eristetyn ympäristön
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')Opi R tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 43
- Oppitunnit
- 159
Usein kysytyt kysymykset
Onko oppitunti ”Mikä ympäristö on R:ssä?” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa R Academy-oppimispolun 3 oppituntia, myös oppitunnin “Mikä ympäristö on R:ssä?”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. R Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Mikä ympäristö on R:ssä?”?
Tutustukaa ympäristöihin nimettyinä listoina, joilla on viittaukset isäntäympäristöihin. Harjoittelet R Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni R Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin R Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/4.
Kuinka kauan ”Mikä ympäristö on R:ssä?”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä R Academy-oppitunnilla?
Kyllä. Jokainen R Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Mikä ympäristö on R:ssä?
- Leksikaalisen näkyvyysalueen säännöt
- Globaali ja paikallinen näkyvyysalue
- Ympäristöjen luominen ja tarkastelu