在 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()
函数分解为 if
和 else
块:
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)
}
}
我有以下代码:
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()
函数分解为 if
和 else
块:
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)
}
}