给定 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/