R中的for循环,下标超出范围

时间:2020-06-06 17:40:27

标签: r for-loop

我正在运行下一个循环,但是R不接受它。

    Buy<-c(320,200,500,490,443,445,202,113,673,319) 
     Sell<-c(234,456,463,663,243,267,209,100,290,215) 
     data=cbind(Buy,Sell)

     a_i <- c(0.1,0.3,0.5,0.7,0.9) 
     d_j <- c(0.1,0.3,0.5,0.7,0.9) 
     g_n <- c(0.1,0.3,0.5,0.7,0.9) 
     B_bar <- mean(data[,1])
     S_bar <- mean(data[,2])

     sort_mat <- cbind(nrow=125, ncol=6)
     k <- 1
    for (i in (1:5)) {
     for (j in (1:5)) {
         for (n in (1:5)) {
              a <- a_i[i]
              d <- d_j[j]
              g <- g_n[n]
              e_b <- g*B_bar 
              u <- (B_bar-e_b)/(a*(1-d)) 
             e_s <- S_bar- (a*d*u)
              if(e_s<0){
                  k <- k+1 
                  next
              }
              in_param <-c(a,d,u,e_b,e_s)
              sort_mat[k,1] <- in_param[1] 
              sort_mat[k,2] <- in_param[2] 
              sort_mat[k,3] <- in_param[3] 
              sort_mat[k,4] <- in_param[4] 
              sort_mat[k,5] <- in_param[5] 
              k <- k+1
          }
      }
   }
        sort_mat

但是,出现以下错误:

Error in `[<-`(`*tmp*`, k, 3, value = in_param[3]) : 
  subscript out of bounds

据我所知,k不会增加,因为结果矩阵(sort_mat)仅填充了一行(k = 1)。问题的潜在原因是什么?我该如何解决以上代码? 谢谢!

1 个答案:

答案 0 :(得分:0)

您必须以不同的方式初始化data frame,例如

sort_mat <- data.frame()

看看您的初始data frame,您创建了一个包含两列(变量)nrowncol的数据框,但没有将它们设置为row或列参数,因为data.frame不接受这些参数。

sort_mat <- cbind(nrow=125, ncol=6)
> sort_mat
     nrow ncol
[1,]  125    6

总体上,这是您要寻找的内容(5列120行)吗?

> head(sort_mat)
   V1  V2        V3     V4       V5
1 0.1 0.1 3705.0000  37.05 276.9500
2 0.1 0.1 2881.6667 111.15 285.1833
3 0.1 0.1 2058.3333 185.25 293.4167
4 0.1 0.1 1235.0000 259.35 301.6500
5 0.1 0.1  411.6667 333.45 309.8833
6 0.1 0.3 4763.5714  37.05 171.0929