我想使用 R 来估计大量模型nls()
函数作用于用户定义的函数。由于许多变量在我的规范中是固定的,我想要一种在我的函数中预先设置它们的方法,但我没有正确理解 R 如何在公式中包含的函数中查找变量。
我看过 Hadley Wickham 的高级 R 书中有关元编程的部分,但它并没有启发我。这是我想要实现的目标的一个简化示例,使用mtcars
数据集:
我尝试为跨规范固定的变量设置默认值:
expo <- function(x, theta, weight = wt) {
x*weight^theta
}
我也尝试过仅使用固定变量的列名作为函数内的变量
expo <- function(x, theta) {
x*wt^theta
}
如果我只想计算函数,这两种方法都有效,比如
attach(mtcars)
expo(qsec, 1)
detach()
但如果我尝试使用我的expo()
例如,估计例程中的函数
nls(mpg ~ phi + expo(qsec, theta),
data = mtcars,
start = c('phi' = -2, 'theta' = 1))
失败并显示消息Error in expo(qsec, theta) : object 'wt' not found
。评论中提出的一种可能性是简单地传递数据集,mtcars
在这种情况下,要expo()
作为一个论点。但因为我只会打电话expo()
在通话中nls()
如果数据集已经是一个参数,如果我能找到一种方法来避免这种重复,我会很高兴。
定义或调用后我的最终目标expo()
适当的是能够做这样的事情:
depvars <- c('qsec', 'drat', 'dist')
lapply <- (depvars, function(x) {
formula <- as.formula(paste0('mpg ~ phi + expo(', x, ', theta)'))
nls(formula,
data = mtcars,
start = c('phi' = -2, 'theta' = 1))
}