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

R语言中按行从均匀分布采样,为何y列值全部相同?

问题描述

现有如下数据:

df <- data.frame(id=1:5,
                 x_min = c(0.1,0.2,0.3,0.4,0.5),
                 x_max = c(0.15,0.23,0.38,0.44,0.57))

我想为每行从对应的均匀分布(区间为x_min到x_max)中抽取一个随机样本,但运行以下代码后,y列的所有值均相同:

set.seed(12)
df$y <- runif(1, min=df$x_min, max=df$x_max)

输出结果:

> df
  id x_min x_max        y
1  1   0.1  0.15 0.103468
2  2   0.2  0.23 0.103468
3  3   0.3  0.38 0.103468
4  4   0.4  0.44 0.103468
5  5   0.5  0.57 0.103468
原因分析

问题出在runif()函数的第一个参数:你传入了1,这表示只生成1个随机数。当你把这个单个值赋值给长度为5的df$y时,R会自动将这个值循环重复,填充整个列,所以所有行的y值都一样。

另外,虽然你传入了长度为5的min和max向量,但因为只要求生成1个随机数,runif()只会用向量的第一个元素(min=0.1,max=0.15)来生成这个唯一的随机数,这也是为什么结果落在第一行的区间里。

解决方法

把runif()的第一个参数改成数据框的行数(nrow(df)),这样函数会为每个min和max的配对生成一个独立的随机数:

set.seed(12)
df$y <- runif(nrow(df), min=df$x_min, max=df$x_max)

运行后输出:

> df
  id x_min x_max        y
1  1   0.1  0.15 0.103468
2  2   0.2  0.23 0.218080
3  3   0.3  0.38 0.340451
4  4   0.4  0.44 0.418722
5  5   0.5  0.57 0.523815

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 05:02:39