[英]Extract fit indexes from nested lists within purrr
我創建了一個函數,可以對數據集中的案例子集執行多個薈萃分析。 我的目標是從特定函數創建的對象中提取特定索引。
library(magrittr)
library(dplyr)
library(purrr)
library(tidyr)
library(meta)
df <- "Scale ID tau tau_SE
1 1 0.41 0.17
1 2 -0.09 0.19
1 3 0.11 0.24
2 5 0.78 0.26
2 8 0.76 0.24
2 9 0.23 0.17
3 1 0.21 0.17
3 12 0.16 0.16
3 13 0.20 0.25"
df <- read.table(text = df, header = TRUE)
df %>%
group_by(Scale) %>%
nest() %>%
mutate(m = map(data, function(d) metagen(d$tau, d$tau_SE)))
#> # A tibble: 3 x 3
#> Scale data m
#> <int> <list> <list>
#> 1 1 <tibble [3 x 3]> <S3: metagen>
#> 2 2 <tibble [3 x 3]> <S3: metagen>
#> 3 3 <tibble [3 x 3]> <S3: metagen>
如您所見,我按比例對數據進行了分組,然后通過purrr::map
應用了meta::metagen
函數。 metagen
對象是一組索引。 我想提取其中的一個子集。 您可以在下面找到列表。
fits <- c("k", "TE.fixed", "lower.fixed", "upper.fixed", "zval.fixed", "pval.fixed", "tau", "H", "I2", "Q", "df.Q", "pval.Q")
您能幫我寫我開始的代碼嗎? 理想情況下,我想通過purrr
做到這purrr
以便代碼可以一致地設計。
更新按照Camille的建議,我可以提取所需的索引。 不幸的是,當我取消嵌套數據時,變量未正確標記,並且總的來說非常混亂,因為列沒有跨不同的比例進行配對。 這可能是一個非常愚蠢的問題,但我自己無法解決。
Enablers %>%
group_by(Scale) %>%
nest() %>%
mutate(m = map(data, function(d) metagen(d$tau, d$tau_SE)),
fitM = m %>% map(function(fit) c(fit$k, fit$TE.fixed, fit$lower.fixed, fit$upper.fixed, fit$zval.fixed, fit$pval.fixed, fit$tau, fit$H, fit$I2, fit$Q, fit$df.Q, fit$pval.Q))) %>%
mutate(fitM = invoke_map(tibble, fitM)) %>%
unnest(fitM)
# A tibble: 3 x 38
# Scale data m `4` `0.230417034444~ `0.036674086272~ `0.424159982616~ `2.330970459557~ `0.019754917401~ `0.171369905853~ `1.317529830742~
# <dbl> <lis> <lis> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#1 1 <tib~ <S3:~ 4 0.230 0.0367 0.424 2.33 0.0198 0.171 1.32
#2 2 <tib~ <S3:~ 4 NA NA NA NA NA NA NA
#3 3 <tib~ <S3:~ NA NA NA NA NA NA NA NA
# ... with 27 more variables: `0.423924923834129` <dbl>, `5.20765456469115` <dbl>, `3` <dbl>, `0.157208039476882` <dbl>, `5` <dbl>,
# `0.479867456084876` <dbl>, `0.271159257236615` <dbl>, `0.688575654933137` <dbl>, `4.50640145652835` <dbl>, `6.59362853436493e-06` <dbl>,
# `0.185286333523807` <dbl>, `1.25125870702537` <dbl>, `0.361286971763421` <dbl>, `6.26259340762719` <dbl>, `0.180377144245142` <dbl>,
# `8` <dbl>, `0.32250031966557` <dbl>, `0.171296573142346` <dbl>, `0.473704066188793` <dbl>, `4.18037929668686` <dbl>,
# `2.91023257890799e-05` <dbl>, `0.0517056311225353` <dbl>, `1.02682517258907` <dbl>, `0.0515662797795363` <dbl>, `7.38058954543798` <dbl>,
# `7` <dbl>, `0.39035653653684` <dbl>
在研究了代碼之后,我能夠提出以下解決方案。 也許會有更好的選擇(更優雅),但至少這一項是可行的。 替代解決方案將受到歡迎!
Enablers %>%
group_by(Scale) %>%
nest() %>%
mutate(m = map(data, function(d) metagen(d$tau, d$tau_SE)),
fitM = m %>% map(function(fit) c(fit$k, fit$TE.fixed, fit$seTE.fixed, fit$lower.fixed, fit$upper.fixed, fit$zval.fixed, fit$pval.fixed, fit$tau, fit$H, fit$I2, fit$Q, fit$df.Q, fit$pval.Q))) %>%
unnest(fitM) %>%
group_by(Scale) %>%
mutate(names = c("N","Est", "SE", "CI_lower","CI_upper","z", "p", "tau", "H", "I2", "Q", "Q_df", "Q_p")) %>%
ungroup() %>%
as.data.frame() %>%
spread(., names, fitM)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.