题目描述如下:
假设一个向量由若干0和1构成,我们想找出其中连续出现1的游程。例如,对于向量(1,0,0,1,1,1,1,1,1,1),从它第4索引处开始有长度为3的游程,而长度为2的游程分别始于第4,第5和第8索引的位置
第一种方法:
> findruns <- function(x,k){
+ n <- length(x)
+ runs <- NULL
+ for(i in 1:(n-k+1)){
+ if(all(x[i:(i+k-1)]))
+ runs <- c(runs,i)
+ }
+ return(runs)
+ }
> y <- c(1,0,0,1,1,1,0,1,1)
> findruns(y,3)
[1] 4
此方法向量的内存分配过程比较耗时,由于调用c(run,i)时给新的向量分配了内存空间,每次执行时都会减慢代码的运行速度
第二种方法
思路是预先分配内存空间
findruns1 <- function(x,k){
n <-length(x)
runs <- vector(length = n)
count <- 0
for(i in 1:(n-k+1)){
if(all(x[i:(i+k-1)]==1)){
count <- count+1
runs[count] <- i
}
}
if(count>0){
run<-runs[1:count]
}
else runs <- NULL
return(runs)
}