Вы можете сделать:
определить функцию: (надежная и с обработкой ошибок)
fun1<-
function(vec, min_rep = 4) {
stopifnot(length(vec)>0, all(vec %in% 0:1))
runL <- do.call(rbind,rle(vec))
lngth<- ncol(runL)
runL <- rbind(runL, seq = 1:lngth, seq2 = NA^runL[2,])
runL[3,] <- ifelse(!runL[2,]|runL[1,]<min_rep, NA, runL[3,])
cases <- na.omit(runL[3,])
if(length(cases)>0) {
for(i in rev(cases)) {
runL[4,1:i][!is.na(runL[4,1:i])] <- i
}
for(i in cases) {
runL[4,i:lngth][!is.na(runL[4,i:lngth])] <- i
}
} else { runL[4,] <- NA }
return(rep(runL[4,],runL[1,]))
}
функция вызова:
vec = c(rep(FALSE, 2), rep(TRUE, 3), rep(FALSE, 2), rep(TRUE, 5),
FALSE, FALSE, rep(TRUE, 6), FALSE, FALSE, FALSE)
cbind(vec,fun1(vec))
vec = rep(T,5)
cbind(vec,fun1(vec))
vec = rep(F,5)
cbind(vec,fun1(vec))
vec = c(rep(F,5),T)
cbind(vec,fun1(vec))
vec = c()
cbind(vec,fun1(vec))
vec = 1:3
cbind(vec,fun1(vec))