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

2024-04-16

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

我想在不首先生成所有可能排列的表的情况下生成这些变量,因为随着变量数量及其可以取的值的增加,这样做会变得很麻烦。问题是我想在不重复的情况下执行此操作。我找到的代码here https://twitter.com/joshua_ulrich/statuses/243339556785618944接近:

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 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 R 中生成可能排列的随机、非重复子集 的相关文章

随机推荐