如何在R中对列表子集化?简洁提取bootTest迭代结果为DataFrame
简洁提取bootstrap抽样结果的方法
前提说明
假设你用sapply生成的bootTest是列表结构(建议调用sapply时加上simplify = FALSE,避免自动转成矩阵),每个列表元素对应一次有放回抽样后的lung数据集,本身就保留原列名。
提取单批次结果
直接通过列表索引即可提取指定迭代的结果,无需复杂函数:
# 提取第1次迭代的DataFrame(保留原列名) iter1_df <- bootTest[[1]] # 提取第2、3次同理 iter2_df <- bootTest[[2]] iter3_df <- bootTest[[3]]
合并所有迭代结果为单个DataFrame
如果需要把所有5次抽样结果合并成一个带迭代标识的DataFrame,用do.call+lapply即可实现:
library(survival) data(lung) # 先模拟生成符合你场景的bootTest(如果已存在可跳过) bootTest <- sapply(1:5, function(i) lung[sample(nrow(lung), replace = TRUE), ], simplify = FALSE) # 合并所有迭代结果,添加iteration列标记批次 boot_full_df <- do.call(rbind, lapply(seq_along(bootTest), function(iter_num) { cbind(iteration = iter_num, bootTest[[iter_num]]) }))
特殊情况处理:若bootTest是矩阵结构
如果你的sapply没有设置simplify = FALSE,导致bootTest是矩阵形式,先转成列表再处理:
# 将矩阵转换为按迭代分组的列表 bootTest_list <- split(as.data.frame(bootTest), rep(1:5, each = nrow(lung))) # 后续提取或合并操作同上述列表结构的方法 iter1_df <- bootTest_list[[1]]
内容的提问来源于stack exchange,提问作者Curious Jorge - user9788072
相关产品推荐
相关产品推荐

