r - 在 R 中生成可能排列的随机、非重复子集

标签 r permutation

给定 p 离散变量,我想随机选择 k 的可能排列。
换句话说,对于 a 中的变量 {0,1}b 中的 {1,2,3} ,两个随机排列将是[0,2][1,3]

我想在不首先生成所有可能排列的表格的情况下生成这些,因为这样做会随着变量数量和它们可以采用的值的增加而变得麻烦。问题是我想在不重复的情况下做到这一点。我发现 here 的代码很接近:

x <- sample.int (2, m*n, TRUE)-1L
dim(x) <- c(m,n) 

我意识到对于 values > 2 ,我可以将其简化为二进制值矩阵,因此限制为二进制变量解决这个问题就足够了。

最佳答案

这可以满足您的需求。它将采用每个变量的排列而不是整体排列。这在技术上是相同的,但我相信它会加快速度。

a <- 1:100
b <- 1:100
c <- 1:100

yourdatamatrix <- cbind(a, b, c)

现在我们有了一些数据,函数来了:
PermutationFunction <- function (data, k) {

  # creating matrix: amount of variables * amount of permutations
  permutations <- matrix(1:(k * length(data[1,])), nrow=k) 
  row <- NULL

  # Output will have as many columns as there are variables.
  for (i in 1:length(data[1,])) {
   permutations[ ,i] <- sample(data[ , i], k, replace=FALSE)
  }
  permutations
}

PermutationFunction(yourdatamatrix, k = 10)

时间检查(40 个变量,每个变量有 10000 个值,取 5000):
system.time(PermutationFunction(yourdatamatrix, 5000))

> system.time(PermutationFunction(yourdatamatrix, 5000))
   user  system elapsed 
   0.05    0.00    0.05 

关于r - 在 R 中生成可能排列的随机、非重复子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14261955/

相关文章:

linux - 使用 ssh 在 shell 脚本中 undefined variable

php - 为什么Heap的算法会出现重复

python - 列表列表内和列表之间的排列 [python]

Python,排列到排列索引函数

read.table 意外地将 "T"解释为 TRUE

r - 组织 R 源代码

R nls 指数曲线

r - 使用合并创建空白行

c++ - 枚举完整图的哈密顿循环的算法(循环、反转、环绕或重复不计算在内的排列)

algorithm - 使用总和约束和冗余选项查找所有可能的排列? (MATLAB)