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

为何R语言中summary函数与min函数返回的最小值存在差异?

关于R语言summary函数极小值显示异常的问题

我使用的是一组极小的风险概率数据,在R语言中调用summary()函数时,得到如下结果:

> summary(prob_ann)

##      Min.   1st Qu.    Median      Mean   3rd Qu.      Max. 
## 0.000e+00 1.000e-16 1.034e-13 3.959e-12 7.880e-13 8.222e-10

但调用min()函数查询实际最小值时,得到了正确结果:

> min(prob_ann)

## [1] 1.199446e-35

问题:为什么summary函数明明采用科学计数法输出,却返回0而非正确的1.199e-35?


更新#1

明明已有足够信息排查问题(且已有解答),却有人以「无法复现」为由关闭问题,这让人费解。以下是复现代码:

set.seed(123)
prob_ann <- c(1.199446e-35, runif(100, 3.33e-15, 9.99e-10))
summary(prob_ann)
min(prob_ann)
quantile(prob_ann,probs=c(0,1))

问题原因

核心在于summary()和min()的计算逻辑完全不同:

  • min()是直接遍历整个向量,精准取出最小的那个数值,所以能返回1.199446e-35;
  • summary()底层依赖quantile()函数计算分位数,默认用的是type=7算法。当数据里存在一个远小于其他样本量级的极小值时,这个算法会对0分位数(即最小值)进行近似处理,最终输出0。

你可以自行验证:调用quantile(prob_ann, probs=0, type=7)会返回0;但如果指定用type=1算法(直接取实际最小值),quantile(prob_ann, probs=0, type=1)就能给出正确的极小值。

解决办法

如果想要summary()返回真实的最小值,可以自定义一个summary函数,指定分位数算法为type=1:

# 自定义summary函数
custom_summary <- function(x) {
  # 用type=1计算分位数
  q_vals <- quantile(x, probs = c(0, 0.25, 0.5, 0.75, 1), type = 1)
  # 组装summary的结果结构
  res <- c(q_vals[1], q_vals[2], q_vals[3], mean(x), q_vals[4], q_vals[5])
  names(res) <- c("Min.", "1st Qu.", "Median", "Mean", "3rd Qu.", "Max.")
  res
}

# 使用自定义函数查看结果
custom_summary(prob_ann)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 06:42:06