目标:最终生成一个允许用户运行一系列“游戏”的 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