#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