将统计函数的部分输出转换为数据帧 [英] Convert part of a statistical function's output into a data.frame

查看:20
本文介绍了将统计函数的部分输出转换为数据帧的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想知道是否有办法将resres2对象的以下输出部分转换为data.frame?

注意:以下答案适用于res,但不适用于res2

由于下面的数据只是个玩具,因此我们很欣赏功能性答案。

library(metafor)

dat <- dat.konstantopoulos2011
res <- rma.mv(yi, vi, random = ~ 1 | district/school, data=dat)

#== OUTPUT (CAN WE TURN ONLY BELOW PART INTO A data.frame?):

#Variance Components:

#            estim    sqrt  nlvls  fixed           factor 
#sigma^2.1  0.0651  0.2551     11     no         district 
#sigma^2.2  0.0327  0.1809     56     no  district/school 

#Test for Heterogeneity:
#Q(df = 55) = 578.8640, p-val < .0001

# AND

res2 <- rma.mv(yi, vi, random = ~ factor(school) | district, data=dat)

#== OUTPUT (CAN WE TURN ONLY BELOW PART INTO A data.frame?):
#Variance Components:

#outer factor: district       (nlvls = 11)
#inner factor: factor(school) (nlvls = 11)

#            estim    sqrt  fixed 
#tau^2      0.0978  0.3127     no 
#rho        0.6653             no 

#Test for Heterogeneity:
#Q(df = 55) = 578.8640, p-val < .0001

推荐答案

如果没有提取数据的默认/标准方法,则可以使用capture.output操作输出。

return_data <- function(res) {
  tmp <- capture.output(res)
  #data start from second line after "Variance Components:"
  start <- which(tmp == "Variance Components:") + 2
  index <- which(tmp == "") 
  #Data ends before the empty line after "Variance Components:"
  end <- index[which.max(index > start)] - 1
  data <- read.table(text = paste0(tmp[start:end], collapse = '
'), header = T)
  heterogeneity_index <- which(tmp == "Test for Heterogeneity:") + 1
  list(data = data, heterogeneity = tmp[heterogeneity_index])
}

res <- rma.mv(yi, vi, random = ~ 1 | district/school, data=dat)
return_data(res)

#$data
#           estim   sqrt nlvls fixed          factor
#sigma^2.1 0.0651 0.2551    11    no        district
#sigma^2.2 0.0327 0.1809    56    no district/school

#$heterogeneity
#[1] "Q(df = 55) = 578.8640, p-val < .0001"

这篇关于将统计函数的部分输出转换为数据帧的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆