在 R 中的循环中查找 if 语句中的 break 索引

finding index of break in if statement within a loop in R

我有以下代码:

    test<-function(x) {

            for ( i in 2:100 ){
            b<-matrix(1,nrow=5,ncol=100)
            b[,i]<-t(x) %*% d[,i-1]         ##x and d are a matrix and vector (not important for this example)
            ifelse(sum(b[,i] - b[i-1]) < 0.0001,break,next)
         }
return( element of b where break occured )
    }

循环会给我,例如在我遇到的一个特定情况下:

> b
[,1]      [,2]      [,3]      [,4]      [,5]      [,6]      [,7]      [,8]
[1,]    1 1.7061460 1.7034962 1.6965905 1.6933022 1.6920115 1.6915324 1.6913578
[2,]    1 0.8019685 0.8041003 0.8035683 0.8031706 0.8029962 0.8029287 0.8029037
[3,]    1 1.1378250 1.1467192 1.1569280 1.1615270 1.1633061 1.1639635 1.1642026
[4,]    1 0.9092191 0.9516261 0.9624585 0.9657958 0.9669282 0.9673277 0.9674706
[5,]    1 0.4448414 0.4201246 0.4135832 0.4115113 0.4108015 0.4105505 0.4104607
          [,9]     [,10]     [,11]     [,12]     [,13] [,14] [,15] [,16] [,17]
[1,] 1.6912947 1.6912718 1.6912636 1.6912607 1.6912596     1     1     1     1
[2,] 0.8028946 0.8028913 0.8028901 0.8028897 0.8028895     1     1     1     1
[3,] 1.1642891 1.1643203 1.1643316 1.1643356 1.1643371     1     1     1     1
[4,] 0.9675220 0.9675405 0.9675472 0.9675496 0.9675504     1     1     1     1
[5,] 0.4104284 0.4104168 0.4104126 0.4104110 0.4104105     1     1     1     1
     [,18] [,19] [,20] [,21] [,22] [,23] [,24] [,25] [,26] [,27] [,28] [,29]
[1,]     1     1     1     1     1     1     1     1     1     1     1     1
[2,]     1     1     1     1     1     1     1     1     1     1     1     1
[3,]     1     1     1     1     1     1     1     1     1     1     1     1
[4,]     1     1     1     1     1     1     1     1     1     1     1     1
[5,]     1     1     1     1     1     1     1     1     1     1     1     1   

我希望函数 return 中断发生前的最后一个值,在这种情况下,我希望它 return b 的第 13 列(这从输入变为输入),我不太确定如何获取中断索引

您可能会受益于将 ifelse() 函数分解为 ifelse 块:

test<-function(x) {

   for ( i in 2:100 ){
     b<-matrix(1,nrow=5,ncol=100)
     b[,i]<-t(x) %*% d[,i-1]
     # test for condition
     if(sum(b[,i] - b[,i-1]) < 0.0001) return(i)
     else next
     # if condition never occurs, return NA
     return(NA)
   }
}