Вот способ заставить вашу meta
функцию работать:
h <- c(1:5)
meta <- function(){
resta <- function(){
v <- h-2
h <<- v
v
}
resta()
}
Вам нужно вызвать resta()
внутри meta
в конце, чтобы сделать его возвращаемым значением.
Кроме того, вместо assign("h", v, envir = globalenv())
вы можете использовать superassignment <<-
, который присваивает h в среде meta
, если она существует там, прежде чем искать в среде выше - в этом случае она переходит к глобальнойenvironment, т.е.
Hadley Wickham : "<<-
никогда не создает переменную в текущей среде, а вместо этого изменяет существующую переменную, найденную в родительской среде. Если<< - не находит существующую переменную, она создаст ее в глобальной среде. "(<strong> Глава 7: Среды, Advanced R )
Убедитесь, что meta()
и h
имеют одно и то же значение:
Вызов один раз:
meta()
h
> meta()
[1] -1 0 1 2 3
> h
[1] -1 0 1 2 3
>
Второй звонок:
meta()
h
> meta()
[1] -3 -2 -1 0 1
> h
[1] -3 -2 -1 0 1
>
И так далее ...