2011-06-05 11 views
3

Pourquoi les opérations suivantes ne fonctionnent-elles pas? Par exemple, pourquoi ne pas appeler "$ < -" sur un environnement a un effet visible en dehors de la fonction?

myAssign <- function(env, name, value) { 
    "$<-"(env, name, value) 
} 
e <- new.env() 
myAssign(e, "x", 1) 
e$x # NULL 

Et aussi

myAssign(e, "x", 1)$x # NULL 

considérant que, si nous faisons cela au niveau supérieur:

"$<-"(e, "x", 1) 
e$x # 1 

Merci!

Répondre

7

Il a un effet, mais pas celui que vous cherchez!

> myAssign(e, "x", 1) 
<environment: 0x1dcd198> 
> ls(e) 
[1] "name" 

La raison est que $<- évalue son second argument d'une manière non standard (comme il se doit, pour obtenir x au lieu de eval(x) dans e$x <- 1, si cela a du sens. Essayez env[[name]] <- value

Questions connexes