使用 for 循环填充 r 中矩阵的值

时间:2021-07-21 18:47:33

标签: r dataframe for-loop matrix

我正在尝试创建一个矩阵或数据框,其中矩阵的每一行都将由每个循环的结果填充。事实是我们在每个循环中得到的值数量是不同的。那么我该怎么做,我们首先用循环结果填充列值,而行/行上的其余未填充值将为空。我的 r 代码是

x<-c(9,10,6,17,23,16,27,18,8,11)
K<-7
ash<-matrix(, nrow = K, ncol = max(x))
for (i in 1:K){
  aa<-max.col(theta, ties.method="first")==i
  ash[i,]<-which(aa==TRUE)
}

一个例子是

a1<-c(1,4,5,7)
> a2<-c(3,6,12,3,45)
> a3<-c(5,9,12,14,3,9,7,2)
> main<-matrix(c(1,4,5,7,NA,NA,NA,NA,3,6,12,3,45,NA,NA,NA,5,9,12,14,3,9,7,2),nrow=3,byrow = TRUE)
> main
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,]    1    4    5    7   NA   NA   NA   NA
[2,]    3    6   12    3   45   NA   NA   NA
[3,]    5    9   12   14    3    9    7    2

所需的矩阵应该看起来像主矩阵,a1、a2、a3是每个循环的结果。当我手动创建示例“main”时,无法弄清楚如何为您提供完全可生产的输出。

1 个答案:

答案 0 :(得分:1)

代码应该改为

for (i in 1:K){
  aa<-max.col(theta, ties.method="first")==i
   i1 <- which(aa)
  ash[i,i1] <- i1
}

更新

基于'a1'、'a2'、'a3'

lst1 <- list(a1, a2, a3)
mx <- max(lengths(lst1))
do.call(rbind, lapply(lst1, `length<-`, mx))

-输出

      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,]    1    4    5    7   NA   NA   NA   NA
[2,]    3    6   12    3   45   NA   NA   NA
[3,]    5    9   12   14    3    9    7    2