将多个矩阵和向量附加到 R 中的单个矩阵中

Appending multiple matrices and vector into a single matrix in R

我有一个函数可以在给定 k 和 n 值的情况下创建矩阵。其中每行组合加起来为 k,n 是列数。示例:如果 k=3 且 n=20,则

library(partitions)
posloc<- function(k, n){
  df = t(as.matrix(blockparts(rep(k,n),k, include.fewer = FALSE)))
  indx <- !duplicated(t(apply(df, 1, sort)))
  (df[indx, ])
}

posloc(4,5)

     [,1] [,2] [,3] [,4] [,5]
[1,]    4    0    0    0    0
[2,]    3    1    0    0    0
[3,]    2    2    0    0    0
[4,]    2    1    1    0    0
[5,]    1    1    1    1    0

我需要将 k:0 之前的所有矩阵附加到一个矩阵中。例如,我希望我的最终矩阵看起来像这样

     [,1] [,2] [,3] [,4] [,5]
[1,]    4    0    0    0    0
[2,]    3    1    0    0    0
[3,]    2    2    0    0    0
[4,]    2    1    1    0    0
[5,]    1    1    1    1    0
[6,]    3    0    0    0    0
[7,]    2    1    0    0    0
[8,]    1    1    1    0    0
[9,]    2    0    0    0    0
[10,]   1    1    0    0    0
[11,]   1    0    0    0    0
[12,]   0    0    0    0    0

我试过他跟随但我总是得到一个只包含最后一行的矩阵

for(i in k:0){
  assign(paste0("pc_", i), posloc(i,n))
}

for(i in k:0){
  temp <- rbind(get(eval(paste0("pc_", i, sep=""))))
}

    [,1] [,2] [,3] [,4] [,5]
[1,]    0    0    0    0    0   

有人可以帮我弄清楚我做错了什么以获得我想要的矩阵吗?谢谢。

使用 sapply.

do.call(rbind, sapply(4:0, function(k) posloc(k, 5)))
#       [,1] [,2] [,3] [,4] [,5]
#  [1,]    4    0    0    0    0
#  [2,]    3    1    0    0    0
#  [3,]    2    2    0    0    0
#  [4,]    2    1    1    0    0
#  [5,]    1    1    1    1    0
#  [6,]    3    0    0    0    0
#  [7,]    2    1    0    0    0
#  [8,]    1    1    1    0    0
#  [9,]    2    0    0    0    0
# [10,]    1    1    0    0    0
# [11,]    1    0    0    0    0
# [12,]    0    0    0    0    0

如果你想坚持for循环,你应该先初始化一个空矩阵。

m <- matrix(nrow=0, ncol=5)
for (i in 4:0) {
 m <- rbind(m, posloc(i, 5))
}
#       [,1] [,2] [,3] [,4] [,5]
#  [1,]    4    0    0    0    0
#  [2,]    3    1    0    0    0
#  [3,]    2    2    0    0    0
#  [4,]    2    1    1    0    0
#  [5,]    1    1    1    1    0
#  [6,]    3    0    0    0    0
#  [7,]    2    1    0    0    0
#  [8,]    1    1    1    0    0
#  [9,]    2    0    0    0    0
# [10,]    1    1    0    0    0
# [11,]    1    0    0    0    0
# [12,]    0    0    0    0    0