[英]entering variable name as argument of a function
我正在嘗試創建一個函數,它將運行並比較給定數據集和變量名稱的一組模型(基本上只能更改一個模型集並將它們應用於所有相關的因變量 - 選擇先驗模型集進行比較,而不是使用現有的數據挖掘功能(例如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)
}
如果我在函數中手動輸入特定的變量名稱,它會正確運行模型。 但是,使用上面的代碼並為response參數輸入文本值不起作用:
RunModel(dataset=MyData,response="responsevariablename")
產生錯誤:變量'dataset $ response'的類型無效(NULL),我解釋為它沒有找到我告訴它使用的列。 我的問題必須在於R如何在函數中插入文本值作為參數。
如何輸入響應變量名稱,以便R知道“formula = response~”變為“formula = dataset $ responsevariablename~”?
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)
注意 - 當我在響應參數上引用時,這不起作用。
您應該能夠使用match.call()實現此目的。
看這篇文章
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.