在实验设计时经常碰到这样的矩阵。该矩阵是把一个单位矩阵的每一行重复一定的次数。 [,1] [,2] [,3] [,4] [,5]
[1,] 1 0 0 0 0
[2,] 1 0 0 0 0
[3,] 1 0 0 0 0
[4,] 0 1 0 0 0
[5,] 0 1 0 0 0
[6,] 0 1 0 0 0
[7,] 0 1 0 0 0
[8,] 0 1 0 0 0
[9,] 0 0 1 0 0
[10,] 0 0 1 0 0
[11,] 0 0 0 1 0
[12,] 0 0 0 1 0
[13,] 0 0 0 1 0
[14,] 0 0 0 1 0
[15,] 0 0 0 0 1
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
我的做法是先写了个函数,输入是一个给定的矩阵和每一行要重复的次数,输出则是想要的矩阵。
repMat <- function(x, each = NULL) {
if (is.null(each)) return(x)
n <- nrow(x)
if (length(each) != n) stop("Number of rows in x should be equal to the length of each!")
res <- NULL
for (i in 1:n) {
currentline <- matrix(rep(x[i, ], each), nrow = each, byrow = TRUE)
res <- rbind(res, currentline)
}
return(res)
}
然后
x <- diag(5)
repMat(x, c(3,5,2,4,1))
就可以了。
不知道还有没有更方便的方法。


雷达卡




京公网安备 11010802022788号







