【问题标题】:Filling the values of matrix in r using for loop使用for循环填充r中矩阵的值
【发布时间】:2021-09-29 03:39:51
【问题描述】:

我正在尝试创建一个矩阵或数据框,其中矩阵的每一行都将由每个循环的结果填充。事实是我们在每个循环中获得的值的数量是不一样的。那么我该如何做到这一点,我们将首先用循环结果填充列值,而行/行上其余未填充的值将为空。我的 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”时,无法弄清楚如何为您提供完全可生产的输出。

【问题讨论】:

  • @akrun,theta 是参数向量。并且 aain `[<-.data.frame`(`*tmp*`, i, i1, value = c(9L, 10L, 66L, 67L, : new columns would leave holes after existing columns
  • @akrun 编辑了问题。
  • @akrun 很难解释 theta 值,Theta 基本上是 K 行的矩阵,列数是我们从所有循环组合中获得的值的总数。 theta 的每个元素都是一个小数点(概率)​​。例如,我给出了 (a1, a2, a3) theta 是 3 x 17。因为长度(a1)+长度(a2)+长度(a3)=17。如果仍然令人困惑,请告诉我。

标签: r dataframe for-loop matrix


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-13
    • 2011-09-29
    • 1970-01-01
    • 1970-01-01
    • 2019-05-27
    • 2020-07-10
    • 2016-05-24
    相关资源
    最近更新 更多