首页 > 解决方案 > R中的for循环,下标超出范围

问题描述

我正在运行以下循环,但 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)。问题的潜在原因是什么?我怎样才能在上面的代码中解决?谢谢!

标签: rfor-loop

解决方案


你必须初始化data frame不同的,例如

sort_mat <- data.frame()

看看您的 intial ,您已经创建了一个数据框,其中包含名为anddata frame的两列(变量),但您没有将它们设置为行或列参数,因为不接受这些参数。nrowncoldata.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

推荐阅读