R/sq_match.R

Defines functions sq_match

Documented in sq_match

#' Find instances of a smaller DNA pattern in a larger DNA sequence.
#'
#' @param sq sequence
#' @param pattern query pattern
#' @param soft whether or not to ignore when a base is missing
#' @export
sq_match <- function(sq, pattern, soft = FALSE) {
  ret <- rep(F, length(sq))
  if (length(pattern) > length(sq)) {
    return(FALSE)
  } else {
    for (i in seq(0, (length(sq) - length(pattern)))) {
      window <- rep(F, length(pattern))
      for (j in seq(1, length(pattern))) {
        if (
          (soft & (pattern[j] == "N")) |
            (pattern[j] == sq[i + j])
        ) {
          window[j] <- TRUE
        }
      }
      if (all(window)) {
        ret[(i + 1):(i + length(pattern))] <- TRUE
      }
    }
  }
  return(ret)
}
g-r-eg/fold2 documentation built on Nov. 4, 2019, 1 p.m.