這裏有四個功能,後者包裝前者。爲什麼包裝函數不能按預期工作?
a <- 0
f1 <- function(expr) {
a1 <- 1
eval(expr)
}
f2 <- function(expr) {
a2 <- 2
f1(expr)
}
f3 <- function(expr) {
a3 <- 3
f2(expr)
}
f4 <- function(expr) {
a4 <- 4
f3(expr)
}
執行以下操作experienments:
> f4(a)
0
預期其工作。但是,如果我們稱之爲
F4(A4) 錯誤的eval(表達式):對象 'A4' 未找到
> f4(a3)
Error in eval(expr) : object 'a3' not found
...
> f2(a2)
Error in eval(expr) : object 'a2' not found
> f2(a1)
Error in eval(expr) : object 'a1' not found
> f1(a1)
Error in eval(expr) : object 'a1' not found
我檢查每一個函數體f3
的當地環境和父母的環境的父母框架是f4
的本地環境,...,f1
的父母是f2
的身體。這是爲什麼發生這種情況的明確解釋?我怎樣才能擺脫這個問題,使代碼工作的目的是函數調用應該允許後續函數(如f3
)找到已定義的符號(例如a4
)?
由於更明確地傳遞表達爲你詳細的解釋!我想我應該再讀一遍這一章。 –
@KunRen如果你發現這回答你的問題,你應該點擊這個答案旁邊的複選標記接受它並關閉問題。 – MrFlick