假设n = 3 然后输出应该是:包含向量的向量: 123 213 132 231 321
答案 0 :(得分:6)
这将解决您的问题:
install.packages("combinat")
require(combinat)
permn(1:3)
还有以下功能:choose,combn,expand.grid 可能证明将来对你有用。
答案 1 :(得分:6)
library(gtools)
permutations(3,3)
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 1 3 2
[3,] 2 1 3
[4,] 2 3 1
[5,] 3 1 2
[6,] 3 2 1
答案 2 :(得分:1)
gregmisc
包应该具有permutations()
功能。
permutations3,3)
答案 3 :(得分:0)
这里有一些非递归代码:
maxdepth <- 4
curdepth <- 1
l <- list()
i <- 0
while (i < maxdepth) {
l <- c(l, 1)
i <- i+1
}
done <- 0
results <- list()
resct <- 1
print(paste(sep=",",l))
while (curdepth > 0) {
if (curdepth == maxdepth) {
results[[resct]] <- l
resct <- resct+1
l[[curdepth]] <- l[[curdepth]]+1
}
if (l[[curdepth]] == maxdepth+1) {
while (!done && l[[curdepth]] == maxdepth+1) {
l[[curdepth]] <- 1
curdepth <- curdepth-1
if (curdepth == 0) {
done <- 1
}
}
if (!done) {
l[[curdepth]] <- l[[curdepth]]+1
}
} else if (curdepth < maxdepth) {
curdepth <- curdepth+1
}
}
编辑:对输出向量而不是打印;完成后,“结果”应包含所需的答案
答案 4 :(得分:0)
我不知道是不是这样,但我会试一试
如果你想做一些具有更长时间矢量的大量排列的东西,它的要求要低得多,并且使用蒙特卡罗并且只需用大量随机排列(可能在R中生成)对空间进行采样。具有sample
功能)。
答案 5 :(得分:0)
前段时间我不得不在基础R中执行此操作而不加载任何包:
permutations <- function(n){
if(n==1){
return(matrix(1))
} else {
sp <- permutations(n-1)
p <- nrow(sp)
A <- matrix(nrow=n*p,ncol=n)
for(i in 1:n){
A[(i-1)*p+1:p,] <- cbind(i,sp+(sp>=i))
}
return(A)
}
}
示例:
> permutations(3)
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 1 3 2
[3,] 2 1 3
[4,] 2 3 1
[5,] 3 1 2
[6,] 3 2 1