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

R语言中对密度向量调用sapply计算均值为何未得到预期结果?

问题原因

你调用c(weib, unif)时,R会将两个长度为100的向量直接拼接为一个长度为200的一维数值向量,此时传入sapply后,遍历的对象是200个单独的数值,自然每次mean()都只会对单个数值做计算,返回200个相同的结果。

解决方法

将多个分布的密度向量存入列表而非直接拼接,使用list()替代c()即可,sapply会自动遍历列表的每个元素(每个元素是完整的密度向量)做计算。

修正后的可运行代码如下:

weib <- dweibull(seq(from=0, to=25, length=100), shape=1, scale=5)
unif <- dunif(seq(from=1, to=10, length=100), min=1, max=10)
mean(weib) # 单独计算可正常得到weib密度向量的均值

# 用list存储多个密度向量,可自定义命名方便区分结果
dists <- list(weibull = weib, uniform = unif)
means <- sapply(dists, mean)
# 此时means就是包含两个均值的向量,对应两个分布的密度向量均值

拓展说明

如果你需要计算的是韦布尔、均匀分布本身的理论统计矩,而非密度值向量的均值,有两种更准确的方式:

  • 直接用对应分布的理论矩公式计算,比如尺度参数为5、形状为1的韦布尔分布理论均值就是5,1到10的均匀分布理论均值为5.5
  • 用rweibull()/runif()生成对应分布的随机样本后再计算样本矩

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 06:06:04