Я пытаюсь использовать лексическую область видимости R с двумя уровнями функций, но поведение в R 3.0.2 кажется неправильным.
foo = function() print(ii)
eye_foo = function( ) {
ii = 1 # (A)
foo()
}
eye_foo() # (B)
ii=2 # (C)
eye_foo() # (D)
Я ожидаю, что (B) напечатает «1», привязываясь к переменной, определенной в (A). Вместо этого (B) выдает сообщение об ошибке «Ошибка печати (ii): объект 'ii' не найден». Однако после определения ii в (C) в глобальной области (D) печатает «2», игнорируя (A) в процессе.
Почему (А) игнорируется?
foo <- expression(print(ii)); eye_foo2 <- function() {ii <- 1; eval(foo)}
. Если вы используетеeval(foo)
где-либо, кроме eye_foo2, он будет использовать значение, найденное в глобальном окружении. - person Frank   schedule 09.11.2013