0 1 3 5 7
1 0 3 5 7
1 3 0 5 7
1 3 5 0 7
1 3 5 7 0
我必须生成上面的矩阵,但是我有一些限制。我不允许使用任何内置功能,例如Matrix((,cbind((,rbind(((length(((或任何环。我必须将应用功能用于此问题。
该函数只有一个参数(假设7(可以生成此矩阵。
我解决这个问题的方法是,我创建一个启动向量,然后使用Sapply函数将此启动向量转换为矩阵。之后,我想在该矩阵上操作以获取所需的输出。
您正确识别可以使用sapply
解决问题。请参阅下面的代码(快速& dirty(:
n <- 7
gen_xs <- function(x) c(0, seq(1, x, 2))
move0 <- function(x, pos) {
if (pos == 0)
return(x)
if (pos == length(x) - 1)
return (c(x[-1], 0))
xt <- x[x != 0]
c(xt[1:pos], 0, xt[(pos + 1):length(xt)] )
}
t(sapply(0:((n + 1) / 2), function(x) move0(gen_xs(n), x)))
输出:
[,1] [,2] [,3] [,4] [,5]
[1,] 0 1 3 5 7
[2,] 1 0 3 5 7
[3,] 1 3 0 5 7
[4,] 1 3 5 0 7
[5,] 1 3 5 7 0