对于R中的Loop for snake draft?

时间:2016-05-16 01:47:59

标签: r loops for-loop

我是R的新手,我正在尝试使用for循环在R中自动化蛇形草案。从本质上讲,我想采用一个包含9列的向量(对于9支球队中的每支球队),然后选择该列中的第一个可用球员(所有9支球队都有相同的36名球员的顺序;排名每个球队队长的感觉如何玩家将执行)并将其放入一个空白矩阵,最终将所有团队最终确定。

正如我所说,有9支球队各自起草4名球员。因为这是一个蛇选,“选择顺序”就像这样:

  • 队长1选择他们的第一选择,然后
  • 队长2选择他们的第一选择(剩下的球员,队长1的首选不再可用),然后
  • 队长3队首发,

一直到

  • 队长9然后拿下他们的第一个选秀权和他们的第二个选秀权,然后
  • Team Captain 8选择第二顺位,

然后回到

  • 选择第二和第三顺位的队长1,
  • 等。

因为有9名队长和36名球员可供选择,每支球队最终有4名球员(非重复)。我希望我已经解释得这么好了。我喜欢这个网站,感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

这是一个建议的解决方案。不是最优雅的外观,但应该适用于您的问题:

players <- paste0("player", 1:36)
picks<-sample(players, 36)
draft <- matrix(NA, ncol=9, nrow=4)
for(i in 1:4){
  if(i %in% c(1,3)) draft[i, 1:9] <- picks[(9*(i-1)+1):(9*(i-1)+ 9)]
  if(i %in% c(2,4)) draft[i, ] <- rev(picks[(9*(i-1)+1):(9*(i-1)+ 9)])
}


draft
     [,1]       [,2]       [,3]       [,4]       [,5]       [,6]       [,7]       [,8]       [,9]      
[1,] "player4"  "player12" "player29" "player10" "player19" "player26" "player3"  "player21" "player20"
[2,] "player17" "player7"  "player9"  "player5"  "player6"  "player23" "player15" "player35" "player13"
[3,] "player36" "player34" "player28" "player32" "player33" "player27" "player30" "player31" "player8" 
[4,] "player11" "player22" "player2"  "player18" "player24" "player25" "player16" "player1"  "player14"

答案 1 :(得分:0)

这是一个相当可读的版本:

set.seed(47)

players <- cbind(replicate(9, sample(1:36)), ID = 1:36)    # column 10 is ID column
pick <- matrix(NA, 4, 9)    # matrix to fill

for(round in 1:4){
    direction <- if(round %% 2 == 1) {1:9} else {9:1}
    for(team in direction){
        pick[round, team] <- players[which.min(players[, team]), 'ID']    # store pick
        players <- players[-which.min(players[, team]), , drop = FALSE]    # erase player's row
    }
}

pick    # rows are rounds, columns are teams, numbers are player IDs
#      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
# [1,]   18    5   20    6   27   36   24   34   26
# [2,]   19   28   32    1   23   33   30    2   17
# [3,]   21   15    8    9   13    7   35   31   14
# [4,]   16    3    4   22   10   11   29   25   12