我试图做一个函数,它将运行并比较给定数据集和变量名的一组模型(实质上是为了能够更改一个模型集并让它们应用到所有相关的因变量 - 选择一个先验模型集进行比较而不是使用像glmulti这样的数据挖掘现有函数)。一个简单的例子:输入变量名称作为函数的参数
RunModelset<- function(dataset, response)
{
m1 <- lm(formula=response ~ 1, data=dataset)
m2 <- lm(formula=response ~ 1 + temperature, data=dataset)
comp <- AICctab(m1,m2, base = T, weights = T, nobs=length(data))
return(comp)
}
如果我在函数内手动输入一个特定的变量名称,它会正确运行模型。然而,使用上面的代码和输入文本值的响应参数不起作用:
RunModel(dataset=MyData,response="responsevariablename")
产生一个错误:无效型(NULL)为变量“数据集$响应”,其解读为意味着它没有找到我要告诉它使用的列。我的问题必须是R如何在函数中插入文本值作为参数。
如何输入响应变量名称,以便R知道“formula = response〜”变成“formula = dataset $ responsevariablename〜”?基于this solution
ETA工作答案:
RunModel<- function(dataset, response)
{
resvar <- eval(substitute(response),dataset)
m1 <- lm(formula=resvar ~ 1, data=dataset)
m2 <- lm(formula=resvar ~ 1 + R.biomass, data=dataset)
comp <- AICctab(m1,m2, base = T, weights = T, nobs=length(data))
return(comp)
}
RunModel(dataset=MyData,response=responsevariablename)
NB - 当我对响应参数报价并没有工作。
试'RunModel(数据集=迈德特,响应= as.name( “responsevariablename”))' – Jthorpe
也许使用'式(paste0(文本, “〜”,变量, “+”,变量2 ))' – cory