我想创建长度为10的集合S = { a, t, g, c }
的所有可能组合。因此,将有4^10 = 2^20 = 1048576
个方法来执行此操作。
我正在寻找R的解决方案。我的googlefu产生了gregmisc
包,但由于我的R版本,我无法安装此包。
package ‘gregmisc’ is not available (for R version 3.1.2)
更新:作为标记答案的替代方案,我还提出了来自gtools
的双线解决方案。请参阅下面的答案。
答案 0 :(得分:3)
我很确定这是重复但是
S <- c( "a", "t", "g", "c")
dd <- do.call(expand.grid,replicate(10,S,simplify=FALSE))
确实解决了这个问题。
答案 1 :(得分:1)
更新:作为标记答案的替代方案,我还想出了一个来自gtools的双线解决方案
library(gtools)
library(stringr)
get_dna_combinations <- function(lengthofsegment = 10){
## this function gets all possible combinations of the given length.
x = permutations(n = 4, r = lengthofsegment, c('a', 't', 'c', 'g'), repeats.allowed=T)
ax = apply(x, 1, function(a) str_join(a, collapse=''))
return(ax)
}
答案 2 :(得分:1)
您也可以使用mkAllStrings
library(Biostrings)
mkAllStrings(c("A", "C", "G", "T"), 10)
答案 3 :(得分:0)
对于更长的字符串,可能存在批次组合,因此如果它成为内存问题,这里有一个生成单个序列的函数(您可以{{1}当然):
Vectorize()
这将返回一个值矩阵(i的每个元素一列)
fun <- function(i, # the index of the sequence you wnat
n, # the lengt of the sequence you want
s){# the set of elements that make up a squence
if(i > length(s)^n - 1)
stop(sprintf('parameter "i" should be in the range [0,%s].',length(s)^n - 1))
s[(i %/% length(s)^(seq(0,n-1))) %% length(s) + 1]
}
你可以通过以下方式获得叮咬:
FUN <- Vectorize(fun,'i')
values <- FUN(1:10,
5,
c('a','t','g','c'))