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

为何用lapply/apply执行Anderson-Darling测试仅返回部分列结果?求解决方案

问题原因及解决办法

可能的原因

  • 非数值型列存在:ad.test(来自nortest包)仅支持数值型向量,数据框里的字符、因子、逻辑型列会被直接跳过,不会返回测试结果。
  • 列包含缺失值(NA):默认情况下,ad.test遇到NA会报错,lapply/apply不会主动展示错误,只会忽略这些列的结果。
  • 样本量不达标:该测试对样本量有最低要求(通常至少5个有效观测值),样本量不足的列无法完成测试,结果不会被返回。

对应解决办法

1. 只保留数值型列

先筛选出数据框里的所有数值列,再执行测试:

# 加载nortest包
library(nortest)
# 筛选数值型列
df_num <- df4[sapply(df4, is.numeric)]
# 执行测试
lapply(df_num, ad.test)

2. 处理缺失值

如果列中有NA,可以先移除缺失值再测试:

lapply(df_num, function(x) ad.test(na.omit(x)))

3. 过滤样本量不足的列

先检查每列的有效样本量,只保留符合要求的列:

# 保留有效观测数≥5的列
df_filtered <- df_num[, sapply(df_num, function(x) length(na.omit(x)) >= 5)]
lapply(df_filtered, ad.test)

另一种更清晰的实现(批量处理并捕获错误)

用purrr包的map函数可以更直观地处理每个列,同时捕获错误信息,避免遗漏:

library(purrr)
library(nortest)

# 对每列执行测试,捕获错误并返回原因
map(df4, function(x) {
  if (!is.numeric(x)) {
    return("非数值型列,无法执行测试")
  }
  x_clean <- na.omit(x)
  if (length(x_clean) < 5) {
    return("有效样本量不足,无法执行测试")
  }
  ad.test(x_clean)
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 14:35:21