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

R按物种分组开展性别比中位数符号检验的报错解决方法

报错原因
  • dplyr::summarise()要求分组计算的每一列输出为长度1的原子向量,不支持复杂列表类型的返回值。
  • DescTools::SignTest()返回的是htest类的列表对象,包含检验方法、统计量、p值、置信区间等多个字段,不是单值向量,直接传入会触发类型报错。
可直接运行的修正代码
# 加载依赖包
library(DescTools)
library(dplyr)

# 读取数据
data <- read.csv(file.choose())
df <- data.frame(
  Species = data$IOC_species,
  SR = data$SR
)

# 分组计算目标统计量
sumstats <- df %>% 
  group_by(Species) %>%
  summarise(
    n = n(), # 统计每个物种对应的母本样本量
    medianSR = median(SR, na.rm = TRUE), # 计算性别比中位数,自动跳过缺失值
    p_sign = SignTest(SR, mu = 0.5)$p.value, # 从符号检验结果中提取p值
    .groups = "drop"
  )

# 可选:过滤样本量过小、检验结果无参考意义的物种(比如保留样本量≥5的物种)
# sumstats <- sumstats %>% filter(n >= 5)

# 查看结果前6行
head(sumstats)
结果说明
  • 最终输出的sumstats表包含所有需要的字段:物种名Species、性别比中位数medianSR、样本量n、符号检验p值p_sign。
  • 代码中添加了na.rm = TRUE参数,避免数据中存在缺失值导致中位数计算返回NA。
  • 若某物种所有母本的SR值全为0.5、或样本量为1,符号检验会返回NA,属于正常情况,这类结果无统计检验效力,可通过过滤样本量阈值的方式剔除。
  • 若需要做多重检验校正,可在summarise后添加mutate(p_adj = p.adjust(p_sign, method = "fdr"))生成校正后的p值列。

内容的提问来源于stack exchange,提问作者Julia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 13:19:05