R/vector_repeats.R

Defines functions .vector_repeats

.vector_repeats <- function(v,value) {

  if(typeof(v)!=typeof(value)) {
    stop("Error! Vector and element should be of the same type.")
  }

  a <- rle(v)

  repeats <- lapply(which(a[[2]]==value),
                    function(rle.2,rle.1) {
                      start <- data.table::fifelse(rle.2 > 1,
                                                   sum(rle.1[1:(rle.2-1)]) + 1L,
                                                   1L)

                      return(list(start = start,
                                  end = start + rle.1[rle.2] - 1L,
                                  length = rle.1[rle.2]))
                    },
                    rle.1=a[[1]]) |>
    data.table::rbindlist()

  return(list(data.table::data.table(start=integer(),
                                     end=integer(),
                                     length=integer()),
              repeats) |>
           data.table::rbindlist())

}
dimitriskokoretsis/qpcrR documentation built on May 29, 2022, 10:11 p.m.