使用runif在data.table中计算一列

5

我想在数据表的每一行使用runif生成一个随机数。不幸的是,我得到了每一行相同的数字。

require(data.table)
dx <- data.table( min=1:10, max=seq(10,100,10))
dx[, sum:=min+max]
dx[, runif:=runif(n=1,min,max)]

> dx
    min max sum    runif
 1:   1  10  11 5.086488
 2:   2  20  22 5.086488
 3:   3  30  33 5.086488
 4:   4  40  44 5.086488
 5:   5  50  55 5.086488
 6:   6  60  66 5.086488
 7:   7  70  77 5.086488
 8:   8  80  88 5.086488
 9:   9  90  99 5.086488
10:  10 100 110 5.086488

为什么runif的行为是这样的,但加法却运行良好? 有人可以建议如何在每一行上使用min和max生成一个均匀分布的随机数吗?

1个回答

12

我只是认为

dx[, runif := runif(.N, min, max)]

应该这样做。通过设置 n=1,您请求生成一个单一的值,然后将其循环使用到适当的长度。仍然以适当的向量化方式处理 minmax


本,你太快了,我跟不上! - Tim Biegeleisen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接