重新评估表的每一行中的函数

时间:2016-05-02 11:50:31

标签: r random

我想模拟从20个袋子中抽出10个球,颜色分布为黑色和白色的50/50。拉出后,球不应该放回去。我感兴趣的价值是每次抽取的白人数量。

为此我创建了一个函数,它给了我确切的值。它首先创建一个从1到20(样本)的随机数列表,然后对黑色(11或更高的数字)进行排序,之后给出剩余数量(长度(白色))

wins <- function()
{
sample <- sample(1:20, 10, replace = FALSE)
whites <- subset(sample, sample<= 10)
return(length(whites))
}

现在我想创建一个包含500个条目的表,每个条目都是函数给出的值。当我把它放在data.table中时,它只会评估一次函数并给我一个包含500个相同条目的表。

data.table(shot=c(1:500), k=wins())

     shot k
  1:    1 5
  2:    2 5
  3:    3 5
  4:    4 5
  5:    5 5
  ---       
496:  496 5
497:  497 5
498:  498 5
499:  499 5
500:  500 5

我必须做些什么?

1 个答案:

答案 0 :(得分:3)

试试这个:

replicate(500, sum(sample(1:20, 10) <= 10))

输出到数据表:

data.table(shot = c(1:500),
           k = replicate(500, sum(sample(1:20, 10) <= 10)))

如果我们希望使用您的功能:

data.table(shot = c(1:500),
           k = replicate(500, wins()))