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

R语言采样问题:如何生成100×5指定概率分布数据集

修正R代码实现100×5数据集的正确采样

你的问题我太熟悉啦——原来的代码里Epsilon只被采样了一次,导致同一列里所有非2的数值都是同一个固定值,完全不符合每次独立采样的要求对吧?下面给你两种实用的修正方案:

方案一:逐元素独立判断(直观易懂)

这种方式对每个元素单独执行取值逻辑,确保每次选10+Epsilon时都重新采样Epsilon:

data.frame(sapply(1:5, function(x) {
  sapply(1:100, function(y) {
    # 用0-1的随机数判断概率,0.6的概率取2,否则取10+随机Epsilon
    ifelse(runif(1) < 0.6, 2, 10 + sample(-2:2, 1))
  })
}))

方案二:向量化操作(更高效)

利用R的向量化特性批量处理,比逐元素循环速度快得多,适合生成大规模数据集:

data.frame(sapply(1:5, function(x) {
  # 生成100个布尔值:0.6概率为TRUE(对应取2)
  take_two <- runif(100) < 0.6
  # 提前生成100个独立的Epsilon值
  eps <- sample(-2:2, 100, replace = TRUE)
  # 根据布尔值批量选择结果
  ifelse(take_two, 2, 10 + eps)
}))

为什么原来的代码出问题?

你原来的代码里,sample(c(2, 10 + sample(-2:2,1)), 100, prob=c(0.6, 0.4), replace=T)这部分,10 + sample(-2:2,1)在创建采样选项列表时就已经计算完成,得到一个固定数值(比如11),之后的100次采样只是在2和这个固定数值之间选,根本没有每次重新生成Epsilon。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:21:11