You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 10:13:04