如何用mapply并行实现每4行数据与对应mu值的Wilcoxon检验?
批量执行Wilcoxon符号秩和检验:分组数据与对应mu值匹配
需求说明
需要将向量df1按每4个元素为一组,每组分别与向量df2中对应的mu值做Wilcoxon符号秩和检验,且因数据集较大,希望用mapply或并行工具future.apply实现。
示例数据
df1 <- c(0.205346764819837, 0.260927758796802, 0.243880102849495, 0.244549329012715, 0.122609277587968, 0.19381141911169, 0.0617801415941672, 0.217762671269064, 0.0513190799901377, 0.293455672572294, 0.222447254411609, 0.271001373674756, 0.00119756260786869, 0.119069423408827, -0.0164312634285513, 0.0446268183579303) df2 <- c(0.23340509, 0.05959987, 0.17380963, 0.14517836)
已知参考代码
- 单个组的检验示例:
wilcox.test(dfnew$A, mu=0.23340509)$p.value
- 分组思路(原代码需修正,因为
df1是向量而非数据框):
# 正确的分组方式:将df1按每4个元素分一组 df1_groups <- split(df1, gl(length(df1)/4, 4))
解决方案
1. 用mapply实现批量检验
直接将分组后的列表与df2的mu值一一对应,通过mapply批量执行检验:
# 定义检验函数 wilcox_mu_test <- function(group_data, mu_val) { wilcox.test(group_data, mu = mu_val)$p.value } # 批量执行 p_values <- mapply(wilcox_mu_test, df1_groups, df2) # 查看结果 names(p_values) <- paste0("Group_", seq_along(p_values)) print(p_values)
2. 用future.apply实现并行处理
针对大数据集,可通过并行加速:
# 加载包 library(future.apply) # 设置并行策略(根据自己的CPU核心数调整) plan(multisession, workers = 2) # 并行执行批量检验 p_values_parallel <- future_mapply(wilcox_mu_test, df1_groups, df2) # 关闭并行会话 plan(sequential) print(p_values_parallel)
代码说明
split(df1, gl(length(df1)/4, 4)):gl()函数生成分组标签,确保df1被均匀分成每4个元素一组,分组数量与df2的长度一致(这里都是4组)。mapply/future_mapply:会自动将df1_groups中的每个分组与df2中对应位置的mu值配对,传入自定义函数执行检验。
内容的提问来源于stack exchange,提问作者pemb_bex6789
相关产品推荐
相关产品推荐

