【发布时间】:2016-03-14 19:10:44
【问题描述】:
我正在尝试创建一个函数,该函数将运行并比较给定数据集和变量名称的一组模型(本质上是为了能够仅更改一个模型集并将它们应用于所有相关的因变量 - 选择一个先验模型集进行比较,而不是使用像 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")
产生一个错误:变量“dataset$response”的类型无效(NULL),我解释为它没有找到我告诉它使用的列。我的问题一定是 R 如何在函数中插入文本值作为参数。
如何输入响应变量名称以便 R 知道“formula=response ~”变为“formula=dataset$responsevariablename ~”?
ETA 工作答案基于this solution:
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)
注意 - 当我在响应参数上有引号时,这不起作用。
【问题讨论】:
-
试试
RunModel(dataset=MyData,response=as.name("responsevariablename")) -
也许使用
formula(paste0(text, "~", variable, "+", variable2))