R中的变量样本上限值

Variable sample upper value in R

我有以下矩阵

m <- matrix(c(2, 4, 3, 5, 1, 5, 7, 9, 3, 7), nrow=5, ncol=2,) 
colnames(x) = c("Y","Z")
m <-data.frame(m)

我正在尝试在每一行中创建一个随机数,其中上限是基于变量值的数字(在本例中为 1*Y,基于每一行的 Z 值)

我目前有:

 samp<-function(x){
    sample(0:1,1,replace = TRUE)}

    x$randoms <- apply(m,1,samp)

将示例函数独立应用于每一行的效果很好,但是当我尝试更改示例中的 x 时,总是会出错。我以为我可以做这样的事情:

samp<-function(x){
        sample(0:m$Z,1,replace = TRUE)}

        x$randoms <- apply(m,1,samp)

但我想那是一厢情愿的想法。

最终我想要的结果:

 Y Z randoms
 2 5       4
 4 7       7
 3 9       3
 5 3       1
 1 7       6

有什么想法吗?

下面将从0到x$Y对每一行进行采样,并将结果存储在randoms中:

x$randoms <- sapply(x$Y + 1, sample, 1) - 1

解释:

sapply 分别获取 x$Y 中的每个值(我们称之为 y),并在其上调用 sample(y + 1, 1)

请注意(例如)sample(y+1, 1) 将从 1:(y+1) 范围内抽取 1 个随机整数。因为你想要一个从 0 到 y 的数字而不是 1 到 y + 1,我们在最后减去 1。

此外,只是指出 - 此处不需要 replace=T,因为无论如何您只是对一个值进行采样,所以它是否被替换并不重要。

根据@mathematical.coffee的建议和我编辑过的例子,这是最终的结果:

m <- matrix(c(2, 4, 3, 5, 1, 5, 7, 9, 3, 7), nrow=5, ncol=2,) 
 colnames(m) = c("Y","Z")
m <-data.frame(m) 

samp<-function(x){
sample(Z + 1, 1)}

m$randoms <- sapply(m$Z + 1, sample, 1) - 1