Опитвам се да използвам лексикалния обхват на R с 2 нива на функции, но поведението в 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) дава съобщение за грешка „Грешка в print(ii) : обектът „ii“ не е намерен“. Въпреки това, след дефиниране на ii в (C) в глобалния обхват, (D) отпечатва "2", игнорирайки (A) в процеса.
Защо (A) се игнорира?
foo <- expression(print(ii)); eye_foo2 <- function() {ii <- 1; eval(foo)}
. Ако използватеeval(foo)
навсякъде освен eye_foo2, той ще използва стойността, която намери в глобалната среда. - person Frank   schedule 09.11.2013