我有一对数据框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
?如何以我想要的格式创建数据框?
答案 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
将返回一个数据框。