从列表的列表中提取某些元素
extract certain elements from lists of lists
我有一个包含多个相关测试输出的列表
dput(head(corr[1:2]))
list(structure(list(statistic = c(S = 1486), parameter = NULL,
p.value = 0.219369570345178, estimate = c(rho = 0.265810276679842),
null.value = c(rho = 0), alternative = "two.sided", method = "Spearman's rank correlation rho",
data.name = "x$theta.x and x$theta.y"), class = "htest"),
structure(list(statistic = c(S = 1852), parameter = NULL,
p.value = 0.699151237307271, estimate = c(rho = 0.0849802371541502),
null.value = c(rho = 0), alternative = "two.sided", method = "Spearman's rank correlation rho",
data.name = "x$theta.x and x$theta.y"), class = "htest"))
我想提取到一个单独的数据框中 p.value 并进行估算。对于每个元素,我可以这样做:
corr[[1]][3]
$p.value
[1] 0.2193696
> corr[[1]][4]
$estimate
rho
0.2658103
但是我没有成功地尝试一次从整个列表中提取这些值。
您可以使用 [
来提取特定元素。
as.data.frame(t(sapply(corr, `[`, c(3, 4))))
# p.value estimate
#1 0.219 0.266
#2 0.699 0.085
此外,使用 broom::tidy
可能更简单。
purrr::map_df(corr, broom::tidy)
# estimate statistic p.value method alternative
# <dbl> <dbl> <dbl> <chr> <chr>
#1 0.266 1486 0.219 Spearman's rank correlation rho two.sided
#2 0.0850 1852 0.699 Spearman's rank correlation rho two.sided
为此,我们还可以使用 magrittr
包中的 extract
函数:
library(purrr)
df %>% map_dfr(magrittr::extract, c("estimate", "p.value"))
# A tibble: 2 x 2
estimate p.value
<dbl> <dbl>
1 0.266 0.219
2 0.0850 0.699
我们可以做到
do.call(rbind, lapply(corr, \(x) data.frame(x[3:4])))
p.value estimate
rho 0.2193696 0.26581028
rho1 0.6991512 0.08498024
我有一个包含多个相关测试输出的列表
dput(head(corr[1:2]))
list(structure(list(statistic = c(S = 1486), parameter = NULL,
p.value = 0.219369570345178, estimate = c(rho = 0.265810276679842),
null.value = c(rho = 0), alternative = "two.sided", method = "Spearman's rank correlation rho",
data.name = "x$theta.x and x$theta.y"), class = "htest"),
structure(list(statistic = c(S = 1852), parameter = NULL,
p.value = 0.699151237307271, estimate = c(rho = 0.0849802371541502),
null.value = c(rho = 0), alternative = "two.sided", method = "Spearman's rank correlation rho",
data.name = "x$theta.x and x$theta.y"), class = "htest"))
我想提取到一个单独的数据框中 p.value 并进行估算。对于每个元素,我可以这样做:
corr[[1]][3]
$p.value
[1] 0.2193696
> corr[[1]][4]
$estimate
rho
0.2658103
但是我没有成功地尝试一次从整个列表中提取这些值。
您可以使用 [
来提取特定元素。
as.data.frame(t(sapply(corr, `[`, c(3, 4))))
# p.value estimate
#1 0.219 0.266
#2 0.699 0.085
此外,使用 broom::tidy
可能更简单。
purrr::map_df(corr, broom::tidy)
# estimate statistic p.value method alternative
# <dbl> <dbl> <dbl> <chr> <chr>
#1 0.266 1486 0.219 Spearman's rank correlation rho two.sided
#2 0.0850 1852 0.699 Spearman's rank correlation rho two.sided
为此,我们还可以使用 magrittr
包中的 extract
函数:
library(purrr)
df %>% map_dfr(magrittr::extract, c("estimate", "p.value"))
# A tibble: 2 x 2
estimate p.value
<dbl> <dbl>
1 0.266 0.219
2 0.0850 0.699
我们可以做到
do.call(rbind, lapply(corr, \(x) data.frame(x[3:4])))
p.value estimate
rho 0.2193696 0.26581028
rho1 0.6991512 0.08498024