r - 如何列出m个符号中所有n个长度的代码?

标签 r algorithm graph-algorithm

我想创建一个所有可能的代码(m符号)的列表,其中包含n数字( n<m )。例如 n=2m=4我想要得到:

0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111

对于 0、1、2:

0000
0001
0002
0010
0011
0012
0020
0021
0022
0100
0101
0102
0110
0111
...
2220
2221
2222

等等。有什么想法吗?

最佳答案

您可以在自定义函数中使用 gtools 包中的函数 permutations,如下所示:

library(gtools)
##
foo <- function(m,n,data=NULL)
{
  if(is.null(data)){
    data <- 0:(n-1)
  }
  ##
  mat <- gtools::permutations(
    n,m,data,
    repeats.allowed=T)
  ##
  apply(mat,1,function(X){
    Reduce(function(x,y){
      paste0(x,y)
    },X)
  })
}
##

因此,对于 m=4n=2

> foo(4,2)
 [1] "0000" "0001" "0010" "0011" "0100" "0101" "0110"
 [8] "0111" "1000" "1001" "1010" "1011" "1100" "1101"
[15] "1110" "1111"

m=4n=3

> foo(4,3)
 [1] "0000" "0001" "0002" "0010" "0011" "0012" "0020"
 [8] "0021" "0022" "0100" "0101" "0102" "0110" "0111"
[15] "0112" "0120" "0121" "0122" "0200" "0201" "0202"
[22] "0210" "0211" "0212" "0220" "0221" "0222" "1000"
[29] "1001" "1002" "1010" "1011" "1012" "1020" "1021"
[36] "1022" "1100" "1101" "1102" "1110" "1111" "1112"
[43] "1120" "1121" "1122" "1200" "1201" "1202" "1210"
[50] "1211" "1212" "1220" "1221" "1222" "2000" "2001"
[57] "2002" "2010" "2011" "2012" "2020" "2021" "2022"
[64] "2100" "2101" "2102" "2110" "2111" "2112" "2120"
[71] "2121" "2122" "2200" "2201" "2202" "2210" "2211"
[78] "2212" "2220" "2221" "2222"

等等...

关于r - 如何列出m个符号中所有n个长度的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26684396/

相关文章:

c# - 计算随机字符串中的英文单词

arrays - 数数1s 和 0s 没有比较

algorithm - 具有最小最大边权重的路径

r - 如何更改二元分类的阈值

r - `downloadHandler` : how to exit gracefully when download will fail (no data)?

algorithm - 通常对连通性使用什么定义

algorithm - 在 Kruskal 算法中存储路径信息

r - 错误: Mapping should be created with `aes() or ` aes_()`

关于runif函数的使用

algorithm - 这个图缩减操作是否已经存在?