a
assing(obj, "name", parent.env())
или что-то подобное.assign("var", value, parent.frame())
Size: a a a
a
assing(obj, "name", parent.env())
или что-то подобное.assign("var", value, parent.frame())
ИП
<<-
ведет себя *не* как присвоение в глобал окружениеAS
EP
<<-
ведет себя *не* как присвоение в глобал окружениеIR
EP
ИП
> a <- 1
> g <- function(x) {
+ a <<- 100
+ b <<- 100
+ }
> f <- function(x){
+ a <- 10
+ g()
+ }
> f()
> a
[1] 100
> b
[1] 100
) з
адается вне f(),
то есть Global.env является enclosing environment, а не окружение f().
То есть имеет значение для scoping все-таки иерархия enclosing environments, а не parent environments, поскольку parent environment не изменился.- г
оворит все-таки про parent environment.- a
nd ->> a
re normally only used in functions, and cause a search to be made through parent environments for an existing definition of the variable being assigned. If such a variable is found (and its binding is not locked) then its value is redefined, otherwise assignment takes place in the global environment.PU
PU
PU
AS
ИП
PU
PU
> rm(f, g, a)
> f <- function() {
+ print(parent.frame(n = 1))
+ a <- 5
+ print(a)
+ g <- function() {
+ print(parent.frame(n = 1))
+ print(parent.frame(n = 2))
+ a <<- 100
+ return(invisible(NULL))
+ }
+ g()
+ print(a)
+ return(invisible(NULL))
+ }
> f()
<environment: R_GlobalEnv>
[1] 5
<environment: 0x559a7d751038>
<environment: R_GlobalEnv>
[1] 100
> a
Error: object 'a' not found
PU
> rm(f, g, a)
> g <- function() {
+ print(parent.frame(n = 1))
+ print(parent.frame(n = 2))
+ a <<- 100
+ return(invisible(NULL))
+ }
> f <- function() {
+ print(parent.frame(n = 1))
+ a <- 5
+ print(a)
+ g()
+ print(a)
+ return(invisible(NULL))
+ }
> f()
<environment: R_GlobalEnv>
[1] 5
<environment: 0x559a7c017000>
<environment: R_GlobalEnv>
[1] 5
> a
[1] 100
PU
a
, во-первых, выводится на печать из окружения f, а во-вторых, появляется в глобальном окружении> rm(f, g, a)
> f <- function() {
+ print(parent.frame(n = 1))
+ g <- function() {
+ print(parent.frame(n = 1))
+ print(parent.frame(n = 2))
+ a <<- 100
+ return(invisible(NULL))
+ }
+ g()
+ print(ls())
+ print(a)
+ return(invisible(NULL))
+ }
> f()
<environment: R_GlobalEnv>
<environment: 0x559a7f63e380>
<environment: R_GlobalEnv>
[1] "g"
[1] 100
> a
[1] 100
PU
S
БА
АК