首页 > 解决方案 > 如果我在不同情况下需要不同的结尾,如何构造一个 for 循环?

问题描述

我的任务是构建具有给定规则的数据框:

有一个像 的向量V<-c(10, 20, 15, 22, 60)。我需要长度(V)的列和max(V)行。对于每个 i 列,我需要 V[i] 值。例如,对于第一列,我需要 10 个非零值和 50 个零,对于第二列,我需要 20 个非零值和 40 个零。对于这个问题,我运行了一个代码:

EL<-matrix( rep( 0, len=3400), nrow = 8)
for (i in 1:8){
  for (j in 1:(n[i])){
    EL[j,i]<-100*p[i]*LGD[i]
  }
}

它显示一个错误

[<-( tmp , j, i, value = 100 * p[i] * LGD[i]) 中的错误:
下标越界`。我应该做一个 ifelse 循环还是有任何可能的方法来解决这个问题&

标签: rloopsfor-loop

解决方案


我会创建一个稀疏矩阵:

library(Matrix)

V<-c(10, 20, 15, 22, 60)

M <- sparseMatrix(dims = c(max(V), length(V)), 
                  i = sequence(V), j = rep(seq_along(V), V))
#60 x 5 sparse Matrix of class "ngCMatrix"
#               
# [1,] | | | | |
# [2,] | | | | |
# [3,] | | | | |
# [4,] | | | | |
# [5,] | | | | |
# [6,] | | | | |
# [7,] | | | | |
# [8,] | | | | |
# [9,] | | | | |
#[10,] | | | | |
#[11,] . | | | |
#[12,] . | | | |
#[13,] . | | | |
#[14,] . | | | |
#[15,] . | | | |
#[16,] . | . | |
#[17,] . | . | |
#[18,] . | . | |
#...

如果由于某种原因你真的需要一个密集的整数矩阵(你为什么要?),你可以这样做+as.matrix(M)


推荐阅读