本文介绍了生成R中可能排列的随机、非重复子集的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

给定p个离散变量,我想随机选择k个可能的排列。换句话说,对于{0,1}中的变量a{1,2,3}中的变量b,将有两个随机排列[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):

system.time(PermutationFunction(yourdatamatrix, 5000))

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

这篇关于生成R中可能排列的随机、非重复子集的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-23 20:58