下面显示的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