9. > x <- "x of R_GlobalEnvn"
> f <- function() {
+ x <- "x of function fn"
+ g()
+ # f x
+ h <- function() cat("h:", x)
+ h()
+ }
> # R_GlobalEnv x
> g <- function() cat("g:", x)
> f() # f g, h
g: x of R_GlobalEnv
h: x of function f
> g() # g
g: x of R_GlobalEnv
10. > x <- "x of R_GlobalEnvn"
> # parent.frame()
> f <- function() {
+ x <- "x of function fn"
+ g()
+ # f f x
+ h <- function() cat("h:", evalq(x, parent.frame()))
+ h()
+ }
> # x
> g <- function() cat("g:", evalq(x, parent.frame()))
> f() # f g, h
g: x of function f
h: x of function f
> g() # g
g: x of R_GlobalEnv
11. R
(enclosing environment)
> x <- 1; y <- 1 R_GlobalEnv
> f <- function(x) print(x) x = 1
> f(2) y = 1
[1] 2
f
x = 2
26. parent.env 1
> f <- function() {
+ e <- environment()
+ cat("environment of f: "); print(e)
+ cat("parent environment of f: "); print(parent.env(e))
+ g <- function() { # f g
+ e <- environment()
+ cat("environment of g: "); print(e)
+ cat("parent environment of g: "); print(parent.env(e))
+ }
+ g()
+ }
> f()
environment of f: <environment: 0x105acb7c0>
parent environment of f: <environment: R_GlobalEnv>
environment of g: <environment: 0x105acf228>
parent environment of g: <environment: 0x105acb7c0>
27. parent.env 1
> f <- function() {
+ e <- environment()
+ cat("environment of f: "); print(e)
+ cat("parent environment of f: "); print(parent.env(e))
+ g <- function() { # f g
+ e <- environment()
+ cat("environment of g: "); print(e)
+ cat("parent environment of g: "); print(parent.env(e))
+ }
+ g()
+ } f parent.env R_GlobalEnv g parent.env f
> f()
environment of f: <environment: 0x105acb7c0>
parent environment of f: <environment: R_GlobalEnv>
environment of g: <environment: 0x105acf228>
parent environment of g: <environment: 0x105acb7c0>
28. parent.env 2
> f <- function() {
+ e <- environment()
+ cat("environment of f: "); print(e)
+ cat("parent environment of f: "); print(parent.env(e))
+ g()
+ }
> g <- function() { # f R_GlobalEnv g
+ e <- environment()
+ cat("environment of g: "); print(e)
+ cat("parent environment of g: "); print(parent.env(e))
+ }
> f()
environment of f: <environment: 0x105adbad0>
parent environment of f: <environment: R_GlobalEnv>
environment of g: <environment: 0x105adf638>
parent environment of g: <environment: R_GlobalEnv>
29. parent.env 2
> f <- function() {
+ e <- environment()
+ cat("environment of f: "); print(e)
+ cat("parent environment of f: "); print(parent.env(e))
+ g()
+ }
> g <- function() { # f R_GlobalEnv g
+ e <- environment()
+ cat("environment of g: "); print(e)
+ cat("parent environment of g: "); print(parent.env(e))
+ } f parent.env g parent.env R_GlobalEnv
> f()
environment of f: <environment: 0x105adbad0>
parent environment of f: <environment: R_GlobalEnv>
environment of g: <environment: 0x105adf638>
parent environment of g: <environment: R_GlobalEnv>
30. parent.frame 1
> f <- function() {
+ e <- environment()
+ cat("environment of f: "); print(e)
+ cat("parent environment of f: "); print(parent.frame())
+ g <- function() { # f g
+ e <- environment()
+ cat("environment of g: "); print(e)
+ cat("parent environment of g: "); print(parent.frame())
+ }
+ g()
+ }
> f()
environment of f: <environment: 0x105ae7670>
parent environment of f: <environment: R_GlobalEnv>
environment of g: <environment: 0x105aeb110>
parent environment of g: <environment: 0x105ae7670>
31. parent.frame 1
> f <- function() {
+ e <- environment()
+ cat("environment of f: "); print(e)
+ cat("parent environment of f: "); print(parent.frame())
+ g <- function() { # f g
+ e <- environment()
+ cat("environment of g: "); print(e)
+ cat("parent environment of g: "); print(parent.frame())
+ }
+ g()
+ } f parent.frame R_GlobalEnv g parent.frame f
> f()
environment of f: <environment: 0x105ae7670>
parent environment of f: <environment: R_GlobalEnv>
environment of g: <environment: 0x105aeb110>
parent environment of g: <environment: 0x105ae7670>
32. parent.frame 2
> f <- function() {
+ e <- environment()
+ cat("environment of f: "); print(e)
+ cat("parent environment of f: "); print(parent.frame())
+ g()
+ }
> g <- function() { # f R_GlobalEnv g
+ e <- environment()
+ cat("environment of g: "); print(e)
+ cat("parent environment of g: "); print(parent.frame())
+ }
> f()
environment of f: <environment: 0x105aef440>
parent environment of f: <environment: R_GlobalEnv>
environment of g: <environment: 0x105aee7c0>
parent environment of g: <environment: 0x105aef440>
33. parent.frame 2
> f <- function() {
+ e <- environment()
+ cat("environment of f: "); print(e)
+ cat("parent environment of f: "); print(parent.frame())
+ g()
+ }
> g <- function() { # f R_GlobalEnv g
+ e <- environment()
+ cat("environment of g: "); print(e)
+ cat("parent environment of g: "); print(parent.frame())
+ } f parent.frame R_GlobalEnv g parent.frame f
> f()
environment of f: <environment: 0x105aef440>
parent environment of f: <environment: R_GlobalEnv>
environment of g: <environment: 0x105aee7c0>
parent environment of g: <environment: 0x105aef440>
34. > x <- "x of R_GlobalEnv" R_GlobalEnv
> f <- function() {
+ x <- "x of function f" x = "x of R_GlobalEnv"
+ g <- function() {
+ cat("x in g:", x, "n")
+ }
+ g(); h() f
+ }
x = "x of function f"
> h <- function() {
+ cat("x in h:", x, "n")
+ }
>
g h
35. > x <- "x of R_GlobalEnv" R_GlobalEnv
> f <- function() {
+ x <- "x of function f" x = "x of R_GlobalEnv"
+ g <- function() {
+ cat("x in g:", x, "n")
+ }
+ g(); h() f
+ }
x = "x of function f"
> h <- function() {
+ cat("x in h:", x, "n")
+ }
> f()
g h
36. > x <- "x of R_GlobalEnv" R_GlobalEnv
> f <- function() {
+ x <- "x of function f" x = "x of R_GlobalEnv"
+ g <- function() {
+ cat("x in g:", x, "n")
+ }
+ g(); h() f
+ }
x = "x of function f"
> h <- function() {
+ cat("x in h:", x, "n")
+ } g()
> f()
x in g: x of function f g h
parent.env parent.frame
37. > x <- "x of R_GlobalEnv" R_GlobalEnv
> f <- function() {
+ x <- "x of function f" x = "x of R_GlobalEnv"
+ g <- function() {
+ cat("x in g:", x, "n")
+ }
+ g(); h() f
+ }
x = "x of function f"
> h <- function() {
+ cat("x in h:", x, "n")
h()
+ }
> f()
x in g: x of function f g h
x in h: x of R_GlobalEnv
parent.frame parent.env
41. > x <- "x of R_GlobalEnv" base package
> l <- list(y = "y of l") .Last.value
> attach(l)
>
l
y = "y of l"
R_GlobalEnv
x = "x of R_GlobalEnv"
l = list(y = "y of l")
42. > x <- "x of R_GlobalEnv" base package
> l <- list(y = "y of l") .Last.value
> attach(l)
> x
[1] "x of R_GlobalEnv"
>
l
y = "y of l"
R_GlobalEnv
x = "x of R_GlobalEnv"
l = list(y = "y of l")
43. > x <- "x of R_GlobalEnv" base package
> l <- list(y = "y of l") .Last.value
> attach(l)
> x
[1] "x of R_GlobalEnv"
> y
[1] "y of l" l
> y = "y of l"
R_GlobalEnv
x = "x of R_GlobalEnv"
l = list(y = "y of l")
44. > x <- "x of R_GlobalEnv" base package
> l <- list(y = "y of l") .Last.value
> attach(l)
> x
[1] "x of R_GlobalEnv"
> y
[1] "y of l" l
> .Last.value y = "y of l"
[1] "y of l"
>
R_GlobalEnv
x = "x of R_GlobalEnv"
l = list(y = "y of l")
45. > x <- "x of R_GlobalEnv" base package
> l <- list(y = "y of l") .Last.value
> attach(l)
> x
[1] "x of R_GlobalEnv"
> y
[1] "y of l" l
> .Last.value y = "y of l"
[1] "y of l"
> y <- "y of R_GlobalEnv"
> R_GlobalEnv
x = "x of R_GlobalEnv"
l = list(y = "y of l")
y = "y of R_GlobalEnv"
46. > x <- "x of R_GlobalEnv" base package
> l <- list(y = "y of l") .Last.value
> attach(l)
> x
[1] "x of R_GlobalEnv"
> y
[1] "y of l" l
> .Last.value y = "y of l"
[1] "y of l"
> y <- "y of R_GlobalEnv"
> y R_GlobalEnv
[1] "y of R_GlobalEnv" x = "x of R_GlobalEnv"
l = list(y = "y of l")
y = "y of R_GlobalEnv"
54. • R Language Definition http://cran.r-project.org/doc/manuals/R-lang.pdf
2.1.10 Environment, 3.5 Scope of variables, 4.3.4 Scope
• R Internals http://cran.r-project.org/doc/manuals/R-ints.pdf
1.2 Environments and variable lookup
• Frames, Environments, and Scope in R and S-PLUS
http://cran.r-project.org/doc/contrib/Fox-Companion/appendix-scope.pdf
• ,R , C&R , 2012
SECTION 208, 209
• U. ( ), ( ), R ,
, 2006
4.3
• R http://www.slideshare.net/shuyo/r-4022379
• environment http://user.ecc.u-tokyo.ac.jp/~s105503/p02.html