This question already has answers here:
Generating all distinct permutations of a list in R

(11个答案)


4年前关闭。




对于一个自行分配的项目,我决定尝试创建所有可能的井字游戏。为了存储和表示每个游戏,我决定使用9列和362880行的矩阵。每行是一场比赛,其中奇数列是“X”的动作,偶数列是“O”的动作。

(1,2,3,4,5,6,7,NULL,NULL)表示X获胜的游戏。

r - 创建一个不包含重复整数的所有九位数字的矩阵[duplicate]-LMLPHP

这就是为什么我要生成不包含重复整数的每九位数字,因为重复整数意味着玩家试图标记已经占用的位置。

以下是一种可能方法的开始
#create matrix that can contain all possible arrangements of moves on a tic-tac-toe board
tictactoematrix <- matrix(ncol = 9, nrow = 362880)

j = 1
k = 1

#create list of possible moves
move <- list(1,2,3,4,5,6,7,8,9)

#populate every row with numbers 1-9
for(i in 1:362880){
  tictactoematrix[i,1] <- move[[1]]
  move[1] <- NULL
  tictactoematrix[i,2] <- move[[1]]
  move[1] <- NULL
  tictactoematrix[i,3] <- move[[1]]
  move[1] <- NULL
  tictactoematrix[i,4] <- move[[1]]
  move[1] <- NULL
  tictactoematrix[i,5] <- move[[1]]
  move[1] <- NULL
  tictactoematrix[i,6] <- move[[1]]
  move[1] <- NULL
  tictactoematrix[i,7] <- move[[1]]
  move[1] <- NULL
  tictactoematrix[i,8] <- move[[1]]
  move[1] <- NULL
  tictactoematrix[i,9] <- move[[1]]
  move[1] <- NULL

  move <- list(1,2,3,4,5,6,7,8,9)
}

输出:

r - 创建一个不包含重复整数的所有九位数字的矩阵[duplicate]-LMLPHP

现在显然存在的问题是每一行都是相同的,而我希望它们每一行都是唯一的。而我一生无法弄清的是如何重新排列
move <- list(1,2,3,4,5,6,7,8,9)
融入所有可能的组合。

最佳答案

如果您愿意使用其他软件包,则可以直接通过以下方式进行操作:

library(combinat)

temp <- permn(c(1,2,3,4,5,6,7,8,9))
fullTable <- do.call("rbind", temp)

10-06 10:54