【发布时间】: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中使用<-实际上并没有返回分配的LHS。重新定位return调用以仅将binseq-name 包围在循环之外,(或者只是不要使用 return,因为它不需要。)