访问函数内列表的元素

时间:2013-08-15 10:24:03

标签: r for-loop lm

我找到了一个有用的功能,我在R中使用它来从线性模型中访问F统计p值

lmp<-function(modelobject){

if(class(modelobject !="lm" stop ("Not an object of class 'lm ")
f<-(modelobject)$fstatistic
p<-pf(f[1],f[2],f[3],lower.tail=F)
attributes(p)<-NULL
return(p)

}

但是,我需要使用此函数的数据不是类lm的对象,而是具有12个元素的列表。列表的每个元素都是从lm生成的摘要。 可以使用

访问列表数据中的每个摘要
data[[1]]$fstatistic

我想更改函数以循环遍历列表中的每个元素并返回F统计p值,我尝试修改函数以包含for循环,     lmpmod&LT; -function(modelobject){

for (i in 1:12) {
f<-(modelobject)[[i]]$fstatistic
p<-pf(f[1], f[2], f[3], lower.tail=F)
attributes(p)<-NULL
return(p)

}
}    

但输出仍然覆盖了自己。 谁能告诉我如何修改这个函数,以便我可以访问列表中的每个元素并计算F统计值p值?

1 个答案:

答案 0 :(得分:3)

尝试

lapply( data , function(x) { tmp <-  summary(x)$fstatistic ;
                             pf( tmp[1] , tmp[2] , tmp[3] , lower.tail = F )
                             } )

例如......

#  non-sensical lm!
set.seed(123)
y <- 1 + rnorm(10)

#  this makes a list of 5 lm's using the response data 'y'
data <- replicate( 5 , lm(  y ~ 1 + rnorm(10) ) , simpl = FALSE )

#  Call 'summary' on model object to calculate the f-statistic, and run 'pf' to get p-value
sapply( data , function(x) { f <- summary(x)$fstatistic ; pf(f[1], f[2], f[3], lower.tail=F) } )
     value      value      value      value      value 
0.53263166 0.03896285 0.70298727 0.57721440 0.45352619