R data.table:生成随机数

时间:2015-04-14 13:16:17

标签: r data.table

我有一个很大的data.table,我正在尝试使用其中一列的值作为分布参数来生成二项式随机数(使用rbinom)。假设index是唯一的行标识符,并且该参数位于responseProb列中。然后

dt[, response := rbinom(1, 1, responseProb), by = index]

rbinom的签名是rbinom(n, size, prob),但由于它没有在prob参数上进行矢量化,因此它只能将标量作为输入,因此我可以&#39 ; t,但能够写:

dt[, response := rbinom(1, 1, responseProb)]

举一个我的意思的简单例子,rbinom(1, 1, seq(0.1, 0.9, .1)),产生

> rbinom(1, 1, seq(0.1, 0.9, .1))
[1] 1

我认为解决方法是使用

dt[, response := rbinom(probResponse, 1, responseProb)]

但是要仔细检查这是否会导致与第一行代码相同的答案。

1 个答案:

答案 0 :(得分:2)

因此rbinom被矢量化,您可以使用.N作为第一个参数。

dt[, response := rbinom(.N, 1, responseProb)]

要检查这是否与索引解决方案提供相同的结果,只需设置种子并重复。

# create reproducible example
N <- 100
dt <- data.table(responseProb = runif(N), 
                 index = 1:N)
# set seed
set.seed(1)
# your original version
dt[, response := rbinom(1, 1, responseProb), by = index]
# set seed again
set.seed(1)
# version with .N
dt[, response2 := rbinom(.N, 1, responseProb)]
# check for equality
dt[, all(response == response2)]
## [1] TRUE