【问题标题】:Access elements of a list inside a function访问函数内列表的元素
【发布时间】:2013-08-17 12:40:23
【问题描述】:

我发现了一个有用的函数,我一直在 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

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 值?

【问题讨论】:

    标签: r for-loop lm


    【解决方案1】:

    试试

    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 
    

    【讨论】:

    • 返回 NULL 值。我实际上需要 fstatistic 中的 p 值,这就是为什么我需要将函数传递给数据。
    • 我认为问题源于您目前执行此操作的方式,当您访问 lm 对象时调用它的 summary 方法,这就是生成f-statistic 的原因。使用原始模式拟合不会这样做。我会编辑....
    猜你喜欢
    • 1970-01-01
    • 2021-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 2016-12-23
    相关资源
    最近更新 更多