我想写一个函数,用字符串指定的参数调用不同的子函数,比如:
genericModel <- function(model, dat, y, x, ...) {
fit <- get(model)(get(y) ~ get(x), data = dat, ...)
return(fit)
}
我能够让它在简单的情况下工作:
> d <- data.frame(x.var = rnorm(10), y.var = rnorm(10), w = rep(1, 10))
> genericModel('lm', d, 'y.var', 'x.var')
Call:
get(model)(formula = get(y) ~ get(x), data = dat)
Coefficients:
(Intercept) get(x)
-0.04242 -0.31619
但是,我在通过字符串传递其他可选参数方面没有成功:
> genericModel('lm', d, 'y.var', 'x.var', weights = 'w')
Error in model.frame.default(formula = get(y) ~ get(x), data = dat, weights = "w", :
variable lengths differ (found for '(weights)')
我知道我可以做到genericModel('lm', d, 'y.var', 'x.var', weights = d$w)
,但这违背了创建灵活函数的目的,我可以通过字符串指定模型和列名。
此外,我可以预见到可选参数包括 data.frame 的列名(例如:)weights = w
和子函数的通用选项(例如:)的复杂性na.action=na.pass
。
编辑:澄清一下,我希望实现的是:
genericModel('lm', d, 'y.var', 'x.var', weights = 'w')
genericModel('glm', d, 'y.var', 'x.var', family = 'binomial')
分别运行线性回归和逻辑回归。在调用 genericModel 时,我需要一些方法来传递可选参数。
有谁知道如何处理这个?谢谢。