下面顯示的R代碼是一個最小工作示例,用於重現我無法理解的錯誤。運行該腳本應該會產生錯誤,Error in eval(expr, envir, enclos) : could not find function "fitModel"
。在environments上閱讀了一兩樣東西后,我想我明白爲什麼會發生這種情況,「fitModel」沒有在「obscureFunction」的執行環境中定義。我通過對「myFormula」進行以下更改來修復: myFormula <- "y ~ eval(fitModel(x, a), envir = environment(fitModel))"
eval(expr,envir,enclos)中的錯誤:找不到函數 - 嵌套函數和環境
我不明白在調用環境中找不到函數時,如何在「fitModel」環境中評估「fitModel」的「obscureFunction」,換句話說,我不明白爲什麼這個代碼改變的作品。我也不明白爲什麼如果在不調用它的情況下運行「topFunction」的主體,原始代碼工作正常,即我們在R_GlobalEnv
中定義「fitModel」和「obscureFunction」,並從控制檯調用「obscureFunction」。
## Minimum Working Example to reproduce error
rm(list = ls())
library(minpack.lm)
topFunction <- function(){
fitModel <- function(x, a){
exp(-a * x)
}
## Create a function to use with lapply()
obscureFunction <- function(){
x <- seq(-1, 1, 0.01)
y <- exp(-0.5 * x)
Data <- data.frame(x, y)
init <- c(a = 1)
myFormula <- "y ~ fitModel(x, a)"
myFormula <- as.formula(myFormula)
nlsOutput <- nlsLM(formula = myFormula, start = init, data = Data)
return(nlsOutput)
}
## Function call
obscureFunction()
## Other calculations done with fitModel()
}
topFunction()
@BrodieG的確如此。評論編輯。 – nsheff