R从n个元素的字符向量中生成大小为m的所有可能组合[重复]

Posted

技术标签:

【中文标题】R从n个元素的字符向量中生成大小为m的所有可能组合[重复]【英文标题】:R generate all possible combinations of size m from of a character vector of n elements [duplicate] 【发布时间】:2014-07-27 20:25:42 【问题描述】:

所以,我有这个向量 c("T", "A", "C", "G") 用于基因组数据。我想生成大小为 3 的所有可能组合,重复如下:

T T T
T T A
T T C
T T G
T A T
..

这会给我 4^3=64 种组合。大小 4 的组合会产生 4^4,大小 5 的组合应该产生 4^5=1024 行。

我搜索了 SOF,并认为 expand.grid() 会这样做,但我不知道如何使用它来获得所需的输出。有什么想法吗?

【问题讨论】:

请注意:*** 通常缩写为 SO,而不是 SOF。 【参考方案1】:
x <- c("T", "A", "C", "G")

do.call(expand.grid, rep(list(x), 3))

【讨论】:

有没有更不直观的符号? ;-)【参考方案2】:

来自gtoolspermutations 就是为此而设计的:

library(gtools)

data <-  c("T", "A", "C", "G")

permutations(4, 3, data, repeats.allowed = TRUE)
##       [,1] [,2] [,3]
##  [1,] "A"  "A"  "A" 
##  [2,] "A"  "A"  "C" 
##  [3,] "A"  "A"  "G" 
##  [4,] "A"  "A"  "T" 
##  [5,] "A"  "C"  "A" 
##  [6,] "A"  "C"  "C" 
##  [7,] "A"  "C"  "G" 
##  [8,] "A"  "C"  "T" 
##  [9,] "A"  "G"  "A" 
## [10,] "A"  "G"  "C" 
## [11,] "A"  "G"  "G" 
## [12,] "A"  "G"  "T" 
## [13,] "A"  "T"  "A" 
## [14,] "A"  "T"  "C" 
## [15,] "A"  "T"  "G" 
## [16,] "A"  "T"  "T" 
## [17,] "C"  "A"  "A" 
## [18,] "C"  "A"  "C" 
## [19,] "C"  "A"  "G" 
## [20,] "C"  "A"  "T" 
…

【讨论】:

真的有必要在你的答案中包含所有 64 种组合吗?

以上是关于R从n个元素的字符向量中生成大小为m的所有可能组合[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何从所有排列中生成所有可能的组合?

PHP算法从单个集合中生成特定大小的所有组合

Javascript - 在单个数组中生成所有元素组合(成对)

从给定的单词列表中生成具有“N”长度的所有可能组合(寻找不重复)

R中N个元素与q个元素的组合

R:来自具有 2 个可能条件 (+/-) 的元素向量的所有可能组合