Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/101.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R A、A、A、B、B、B、B、B的唯一组合的问题编号_R_Combinations - Fatal编程技术网

R A、A、A、B、B、B、B、B的唯一组合的问题编号

R A、A、A、B、B、B、B、B的唯一组合的问题编号,r,combinations,R,Combinations,我试图找到一种方法,在R中列出所有可能的唯一排列a,a,a,a,B,B,B,B 组合最初被认为是获得解的方法,因此组合就是答案 我想这就是你想要的@比尔提出了将unique和combn相结合的建议。我们还将使用apply族生成所有组合。由于unique删除了重复的行,因此我们需要在unique对其进行排序之前转置combn的结果。然后,在返回屏幕之前,我们将它们转换回原来的位置,以便每列代表一个唯一的答案 #Daters x <- c(rep("A", 4), rep("B",5)) #G

我试图找到一种方法,在R中列出所有可能的唯一排列a,a,a,a,B,B,B,B


组合最初被认为是获得解的方法,因此组合就是答案

我想这就是你想要的@比尔提出了将
unique
combn
相结合的建议。我们还将使用apply族生成所有组合。由于
unique
删除了重复的行,因此我们需要在
unique
对其进行排序之前转置
combn
的结果。然后,在返回屏幕之前,我们将它们转换回原来的位置,以便每列代表一个唯一的答案

#Daters
x <- c(rep("A", 4), rep("B",5))
#Generates a list with ALL of the combinations
zz <- sapply(seq_along(x), function(y) combn(x,y))
#Filter out all the duplicates
sapply(zz, function(z) t(unique(t(z))))
编辑因为问题是关于置换而不是组合,所以上面的答案没有那么有用。在给定一组参数的情况下,概述了生成唯一置换的函数。我不知道它是否可以改进,但这里有一种使用该功能的方法:

fn_perm_list <-
 function (n, r, v = 1:n)
 {
    if (r == 1)
       matrix(v, n, 1)
    else if (n == 1)
       matrix(v, 1, r)
    else {
       X <- NULL
       for (i in 1:n) X <- rbind(X, cbind(v[i], fn_perm_list(n -
            1, r - 1, v[-i])))
        X
    }
 } 

zz <- fn_perm_list(9, 9)

#Turn into character matrix. This currently does not generalize well, but gets the job done
zz <- ifelse(zz <= 4, "A", "B")

#Returns 126 rows as indicated in comments
unique(zz)

fn_perm_list不需要生成置换,然后选择唯一的置换。
这里有一个简单得多的方法(也快得多):要生成4a和5b的所有排列,我们只需要列举将4a放置在9个可能位置中的所有可能方法。这只是一个组合问题。我们可以这样做:

x <- rep('B',9) # vector of 9 B's

a_pos <- combn(9,4) # all possible ways to place 4 A's among 9 positions

perms <- apply(a_pos, 2, function(p) replace(x,p,'A')) # all desired permutations

也许您想要的是
?combn
?很好的开始,但是combn函数要求您一次选择m。我只是在寻找上面字符串的所有唯一组合……不是子集。也许我也没有想到这一点。你可以尝试一下
?unique
?combn
。明白了。你的问题-仍然以combn思维方式思考,
combn(x,2)
返回的值都是
A
被认为是多余的吗?这和我在这里所做的是错误的组合排列吗。在这种情况下,顺序很重要,在那种情况下,我相信有9个/(4!*5!)=126种不同的aabbb排列。置换的一些例子有:aaabbbba、aaabbbab、aaabbbbabb、aaaabbabbbb等等。我们可以修改代码追踪以达到目的吗?@RyanB-更新答案以回应您的评论。我引用的链接中似乎有一些很好的信息,这些信息可能比我抓取的函数更有效。@RyanB-你也可以用这些信息和标题更新你的问题。@RyanB:如果Chase找到了,请选择他的答案,以便其他人更容易看到。
x <- rep('B',9) # vector of 9 B's

a_pos <- combn(9,4) # all possible ways to place 4 A's among 9 positions

perms <- apply(a_pos, 2, function(p) replace(x,p,'A')) # all desired permutations
> dim(perms)
[1]   9 126
> perms[,1:4] ## look at first few columns
      [,1] [,2] [,3] [,4]
 [1,] "A"  "A"  "A"  "A" 
 [2,] "A"  "A"  "A"  "A" 
 [3,] "A"  "A"  "A"  "A" 
 [4,] "A"  "B"  "B"  "B" 
 [5,] "B"  "A"  "B"  "B" 
 [6,] "B"  "B"  "A"  "B" 
 [7,] "B"  "B"  "B"  "A" 
 [8,] "B"  "B"  "B"  "B" 
 [9,] "B"  "B"  "B"  "B"