【问题标题】:All binary sequences in RR中的所有二进制序列
【发布时间】:2017-03-01 10:18:56
【问题描述】:

我正在尝试编写一个递归函数,该函数将整数 n 作为输入并返回一个包含所有长度为 n 的二进制序列的矩阵。 我写了这段代码,但它没有给出输出

binseq <- function(n){
binsequ <- matrix(nrow = length(n), ncol = n)
r <- 0 # current row of binseq
for (i in 0:n) {
for (j in 0:n) {
for (k in 0:n) {
r <- r + 1
return (binsequ[r,] <- c(i, j, k))
}
}
}
}

我尝试使用 n=3 运行它

binseq(3)

但没有成功。 但是,当我不使用函数命令并给出特定数字时,它可以工作。例如,

binseq <- matrix(nrow = 8, ncol = 3)
r <- 0 # current row of binseq
for (i in 0:1) {
for (j in 0:1) {
for (k in 0:1) {
r <- r + 1
binseq[r,] <- c(i, j, k)
}
}
}
binseq

输出是:

     [,1] [,2] [,3]
[1,]    0    0    0
[2,]    0    0    1
[3,]    0    1    0
[4,]    0    1    1
[5,]    1    0    0
[6,]    1    0    1
[7,]    1    1    0
[8,]    1    1    1

【问题讨论】:

  • expand.grid(replicate(3, c(0,1), simplify=FALSE)) 会为你做这项工作吗?
  • 问题是在return 中使用&lt;- 实际上并没有返回分配的LHS。重新定位 return 调用以仅将 binseq-name 包围在循环之外,(或者只是不要使用 return,因为它不需要。)

标签: r binary


【解决方案1】:

我创建了一个函数,正在考虑进行递归,但结果是使用循环。希望看看其他人是如何做到这一点的,因为这听起来像是一个非常基本的问题。降落在这里。如果有帮助,这是我的功能。

##k: number of digits, k>1, eg k=3 for 101 etc

binary_gen <- function(k) {

base <- c(0L,1L)

##initialize
bi.set <- integer(2^(k))
bi.set[1:2] <- base

##create set through loop
for (i in 2:k) {

  bi.set[(2^(i-1)+1):2^i] <- 10^(i-1)+bi.set[1:2^(i-1)] 
  bi.set
  
}

return(bi.set)

}

这里是 k=4 的输出。

> binary_gen(4L)

[1] 0 1 10 11 100 101 110 111 1000 1001 1010 1011 1100 1101 1110 1111

您可以将输出向量操作为所需格式的矩阵(行数=k,列数=2^k)。基于k,k位二进制数的位置为2^(k-1)+1到2^k。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-17
    • 1970-01-01
    • 2020-02-06
    • 2021-03-13
    • 1970-01-01
    相关资源
    最近更新 更多