试图在R

时间:2015-04-29 05:00:57

标签: r

我已经在这里查看了我的问题的解决方案,但我没有看到。

在R中,我正在尝试模拟 Deal or No Deal 以获取让我们熟悉该软件的项目。我计划这是一个很大的循环,但我不能让我的第二个循环工作。我将它拆开以便于阅读(以及我的调试/测试)。

这个循环模拟了我们在整个游戏中保留的原始案例。

    for(i in 1){
    cases <- 1:26
    originalpick <- sample(cases, 1, replace = FALSE) #choose a case
    casesremaining <- (length(cases) - 1) #subtract original case from cases
    }

这个循环模拟我们挑选的第一个案例。

    for(i in 1){
    casepicked <- replicate(1,sample(cases[-c(originalpick)], 1, replace = FALSE))
   }

我的问题是我很可能会再次选择原来的案子。我使用样本因为我可以因为这个原因而关闭替换,因为那不起作用,我认为复制会有所帮助。我已经看到了更新功能,但我似乎也无法使用它。

这基本上就是游戏,因为我必须挑选案例,直到我留下2个案件(最初挑选案件和案件变量留下的案件)。

我还是R的新手,所以可能只是我对这些功能的误解?任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:2)

假设您想要模拟挑选案例的顺序,只需调用sample(如果您想要执行多次模拟,则包含在replicate中)即可完成此操作。

例如:

set.seed(1)
cases <- 1:26
picks <- sample(cases)

picks
## [1]  7 10 14 21  5 19 23 13 12  2  4  3 25 22 24  6  8  9 16 11 26 17 15  1 18 20

如果未提供其他参数,sample(x)只会置换向量x。上面,最初选择的案例是案例7,picks的其余元素代表随后挑选的案例。

执行多项模拟:

picks3 <- replicate(3, sample(cases))

##       [,1] [,2] [,3]
##  [1,]    1   12   21
##  [2,]   10    7   25
##  [3,]   21    2   11
##  [4,]    8    3   17
##  [5,]   11   25    9
##  [6,]   13   11    7
##  [7,]   25   14   16
##  [8,]    4    8    4
##  [9,]   15   17   13
## [10,]   12    5    3
## [11,]   24   19   19
## [12,]    2   18   23
## [13,]   22   10   20
## [14,]    6    4    1
## [15,]   20    6    8
## [16,]   23    9   10
## [17,]   14    1   12
## [18,]    5   16   24
## [19,]    9   23   14
## [20,]   16   26   15
## [21,]   26   21    5
## [22,]    3   24   22
## [23,]   17   15   26
## [24,]   19   22    2
## [25,]    7   13   18
## [26,]   18   20    6

现在,每列都是选择顺序的独立模拟。

有兴趣的是,要使用for循环一次模拟一个选择(例如,如果您想在此过程中插入其他步骤),您可以执行以下操作(尽管有很多方法可以做它):

picks <- sample(cases, 1) # original pick
for (i in 2:length(cases)) { # subsequent picks
  remaining <- setdiff(cases, picks)
  picks[i] <- remaining[sample(length(remaining), 1)]
}

注意:我们使用的是remaining[sample(length(remaining), 1)]而不是sample(remaining, 1),因为在最后一次迭代中,remaining将是一个数字(最后一个案例的数量)。传递单个号码,例如4,sample导致sample(1:4, 1)而非sample(4, 1)。有关详情,请参阅this post