输入变量名作为函数

时间:2016-03-14 19:10:45

标签: r function arguments

我正在尝试创建一个函数来运行并比较给定数据集和变量名称的一组模型(基本上只能更改一个模型集并将它们应用于所有相关的因变量 - 选择一个先验模型集来比较而不是使用像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)

注意 - 当我在响应参数上引用时,这不起作用。

1 个答案:

答案 0 :(得分:0)

您应该可以使用match.call()来实现此目的。

请参阅this post