0

目标:最终生成一个允许用户运行一系列“游戏”的 R 包。在游戏中,两名玩家相互对抗,每轮(总共 100 名)玩家选择玩 C 或 D。这些都是通过移动集完成的,其形式为

(1) “C”或“D”之间的预定义选择列表,即 50 个“C”然后是 50 个“D”的向量或

(2) 一组逻辑指令,例如,第一轮打“C”,R2 打“C”,如果对手在 R1 中打“C”,否则打“D”,R3-R99 随机打,R100 总是打“D”。

每轮有 4 种可能的结果。

P1 的选择 |P2 的选择 == [P1 得分] [P2 得分]

C|C==[3][3]

C|D==[0][5]

D|C==[5][0]

D|D==[1][1]

我在哪里:

我已经了解了将 Cs 和 Ds 的向量组合成成对 Cs 和 Ds 矩阵的部分。

代码:

   #Sample Strategies#
p1 <- c("C","D","C","D","D")
p2 <- c("D","D","D","D","D")
p3 <- c("C","C","C","C","C")
p4  <-c("D","D","C","D","C")

#Combining into a matrix#
gameboard<-cbind(p1, p2, p3, p4, deparse.level = 1)

#First Part of Function#
my_game <- function(trial, n_samples, dat) {
  # as per my comment, generate the game result and name using the colnames directly
  game <- sample(colnames(dat), n_samples)
  list_name <- paste0("", paste(game, collapse=" V "))
  game_result <- paste(dat[, game[1]], 
                       dat[, game[2]], 
                       sep='')
  
  # return both the name and the data in the format desired to parse out later
  return(list(list_name, game_result))
}
#Second Part of the Function#
my_game_wrapper <- function(trials, n_samples, dat) {
  # for multiple trials we create a list of lists of the results and desired names
  results <- lapply(1:trials, my_game, n_samples, dat)
 
  # extract the names and data
  result_names <- sapply(results, '[', 1)
  result_values <- sapply(results, '[', 2)
  
  # and return them once the list is pretty.
  names(result_values) <- result_names
  return(result_values)
}

#Applying the function#
result<-my_game_wrapper(10, 2, gameboard)

Dataframing it
coolresults<-as.data.frame(do.call(rbind, result))

我缺乏什么

计分功能。

新矩阵应该是什么样子。

               P1         P2
Round1 [CD]     0          5
Round2 [DD]     1          1
Etc

但是假设有 30 名玩家,每个人都将与其他玩家和自己比赛。我想这将意味着 900 个矩阵,对吗?因此,创建每个玩家 100 轮后总得分的超级矩阵会更有帮助。

分数是行玩家在玩列玩家时的总分:

        P1      P2    P3     P4     P5

P1     462    453    252    560    600

P2     301    242    437    555    439

P3     232    522    555    232    527

P4     etc

P5
4

0 回答 0