2017-02-16 42 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

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