2017-02-16 39 views
0

我有一個稱爲數據的數據幀。我創建了一個循環遍歷變量列表的函數,並使用lapply爲每個變量創建一個線性模型。此方法基於this後。循環通過R中的幾個事後測試

library(datasets) 
testDF <- data.frame(Salaries) 
#creates list of variables 

varListTest <- names(testDF)[3:4] 

#creates a model for each of the variables in question 
model<- lapply(varListTest, function(x) { 
    lm(substitute(i~Rank, list(i = as.name(x))), data = testDF)}) 

#output model 
lapply(model, summary) 

這很好。不過,我也想以同樣的方式運行事後檢驗,通常我會通過運行做到這一點:

TukeyHSD(model) 

這顯然不會在這個例子中工作,但我認爲這將:

lapply(model, TukeyHSD) 

但這返回:

no applicable method for 'TukeyHSD' applied to an object of class "lm" 

我缺少什麼,使這項工作?

+0

可以使用'dput(數據)提供一些數據'。 – Jimbou

+0

是的,所以我不太願意在這裏上傳自己的數據,所以我改變了我的帖子以包含來自R的示例數據集.dput(testDF)的輸出發佈在這裏:https://codedump.io/share/ TKO5BlEbPgSF/1 –

+0

Guy,你的代碼有更多的問題='varList'定義和'varList'使用,'Anova'不存在('A' ..),請測試你自己的代碼... –

回答

0

嘗試:

lapply(model, function(m) TukeyHSD(aov(m))) 

這裏是一個重複的例子:

testDF=iris 


varListTest <- names(testDF)[1:3] 

#creates a model for each of the variables in question 
model<- lapply(varListTest, function(x) { 
    lm(substitute(i~Species, list(i = as.name(x))), data = testDF)}) 


lapply(model, function(model) TukeyHSD(aov(model))) 

它們提供(截)

[[1]] 
    Tukey multiple comparisons of means 
    95% family-wise confidence level 

Fit: aov(formula = model) 

$Species 
         diff  lwr  upr p adj 
versicolor-setosa 0.930 0.6862273 1.1737727  0 
virginica-setosa  1.582 1.3382273 1.8257727  0 
virginica-versicolor 0.652 0.4082273 0.8957727  0 
+0

完美!就是我想要的!非常感謝。 –