«$<-" и среды

#r

#r

Вопрос:

Почему следующее не работает? Т.е., почему вызов «$<-» в среде не оказывает видимого эффекта за пределами функции?

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

А также

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

Тогда как, если мы сделаем это на верхнем уровне:

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

Спасибо!

Ответ №1:

Это действительно дает эффект, просто не тот, который вы ищете!

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

Причина в том, что $<- вычисляет свой второй аргумент нестандартным способом (как и должно быть, чтобы получить x вместо eval(x) in e$x <- 1 , если это имеет какой-либо смысл. Попробуйте env[[name]] <- value