Я не уверен, что вы ищете это, я использую gtools::permutations
. Поскольку перестановки всегда являются надмножеством комбинации 'C' и 'T', мы будем фильтровать только те строки, в которых количество 'C' и 'T' равно.
Дайте мне знать, если мой понимание не ясно, и решение не работает для вас.
library(gtools)
grps <- c('C', 'T')
n <- 10
p = permutations(length(grps), n, grps, repeats.allowed = TRUE)
data.frame(p[(rowSums(p == 'C') == n/length(grps)),], stringsAsFactors=FALSE)
Вывод для нескольких строк:
X1 X2 X3 X4 X5 X6 X7 X8 X9 X10
1 C C C C C T T T T T
2 C C C C T C T T T T
3 C C C C T T C T T T
4 C C C C T T T C T T
5 C C C C T T T T C T
6 C C C C T T T T T C
7 C C C T C C T T T T
8 C C C T C T C T T T
9 C C C T C T T C T T
В случае, если вы хотите вставить эти строки в отдельный вектор, тогда, вероятно, вы можете использовать do.call
:
grps <- c('C', 'T')
n <- 10
p = permutations(length(grps), n, grps, repeats.allowed = TRUE)
dfs <- data.frame(p[(rowSums(p == 'C') == n/length(grps)),], stringsAsFactors=FALSE)
do.call('paste0', dfs)
Выход для нескольких векторов :
[1] "CCCCCTTTTT" "CCCCTCTTTT" "CCCCTTCTTT" "CCCCTTTCTT"
[5] "CCCCTTTTCT" "CCCCTTTTTC" "CCCTCCTTTT" "CCCTCTCTTT"
[9] "CCCTCTTCTT" "CCCTCTTTCT" "CCCTCTTTTC" "CCCTTCCTTT"