R - 解压缩t.test结果的嵌套列表

时间:2017-08-29 15:21:32

标签: r list nested

我有一对数据框attended,有12对前/后数值指标(列),并计算每对的t检验。

以下是执行单个测试的函数:

attended_test <- function(pre, post) {
tryCatch(t.test(log10(attended[pre]+1), log10(attended[post]+1), alternative 
= "greater", paired = FALSE,
              var.equal = FALSE, conf.level = 0.95), error=function(e) 
c("NA","NA","NA","NA","NA","NA","NA","NA","NA")) 
}

创建与数据框的列对应的向量:

pre <- as.list(c(4,5,6,7,8,9,16,17,18,19,20,21))
post <- as.list(c(10,11,12,13,14,15,22,23,24,25,26,27))

将测试功能应用于每对列:

attended_test_results_list <- mapply(attended_test, pre, post, SIMPLIFY = FALSE)

我遇到的问题是将attended_test_results_list列入单个数据框。此结构是每个测试(也称为嵌套列表)的12个列表对象的列表。

我从每个测试结果列表中找到了我想要的属性:

data.frame(t(unlist(attended_test_results_list[[1]][c("estimate","p.value","statistic","conf.int")])))

其输出如下:

estimate.mean.of.x estimate.mean.of.y   p.value statistic.t   conf.int1 conf.int2
1          0.2476742          0.2530888 0.5950925  -0.2407039 -0.04243605       Inf 

我想为每个测试(12行)创建一个单行数据帧,如上所述。我已经多次使用lapply,并且我理解我需要为attended_test_results_list中的12个列表中的每个列表执行上面的代码,并将行绑定到单个数据帧。

但是有了这个功能,我收到了这个错误:

attended_unpacked_test_results <- lapply(attended_test_results_list, 
function(x){
data.frame(t(unlist(attended_test_results_list[[x]]
[c("estimate","p.value","statistic","conf.int")])))
})

Error in attended_test_results_list[[x]] : invalid subscript type 'list' 

我是否需要在某个地方使用第二个lapply?如何以我想要的格式创建数据框?

1 个答案:

答案 0 :(得分:1)

一个lapply就足够了。您收到错误是因为您将列表传递给参数x。这就是您收到错误invalid subscript type 'list'

的原因

我不确定,但这应该有效:

attended_unpacked_test_results <- lapply(attended_test_results_list, function(x) {
  data.frame(t(unlist(x[c("estimate","p.value","statistic","conf.int")])))
})

这将返回一个列表。可能sapply将返回一个数据框。