Как создать последовательность с повторяющимся мотивом, который перемежается со случайными символами - PullRequest
4 голосов
/ 15 апреля 2019

Я пытаюсь сгенерировать последовательность определенных букв, содержащих повторяющийся мотив, который перемежается со случайными буквами.

Например: ABXXXXXXXABXXXXXXXABXXXXXXX, где X = A, B, C или D, выбран случайным образом.

Мне также нужно указать общую длину последовательности, изменить повторяющиеся буквы и как часто они это делают (например, чтобы BC повторялось каждые 5 символов).

К сожалению, я смог получить только случайную последовательность определенной длины, содержащую выбранные символы:

set.seed(42)
x <- sample(letters[c(1, 2, 3, 4)], size=200, replace = TRUE)

Ответы [ 2 ]

1 голос
/ 15 апреля 2019

Вот пользовательская функция, которая повторяет фиксированный шаблон, каждые n символов,

f1 <- function(x, overall_len, chars_repeat) {
    l1 <- rep(list(x), (overall_len / chars_repeat))
    res <- paste(sapply(l1, function(i)
        paste0(i, paste0(sample(letters[1:4], size = chars_repeat, replace = TRUE), collapse = ''),
        collapse = '')),
        collapse = '')
    return(res)
}

f1('WQ', 32, 8)
#[1] "WQcccdddacWQbacccabcWQccaaaaaaWQabbcddcb"
f1('BC', 20, 4)
#[1] "BCbdbcBCacbdBCdacbBCdbbaBCaccd"
f1('BC', 20, 10)
#[1] "BCdbbabacccaBCbabdbbbaac"
f1('AAA', 40, 5)
#[1] "AAAabcacAAAdbcbcAAAbdbdcAAAadcdcAAAcadbdAAAddaacAAAadcabAAAdbabb"
0 голосов
/ 15 апреля 2019

Создание функции, использующей stringi и цикл for:

library(stringi)

generateRandomSequence <- function(fixedPart, randomLength, repititions){
  output <- ""

  for(i in 1: repititions){
    newPart <- paste(fixedPart, stri_rand_strings(1, randomLength) ,sep="")
    output <- paste(output,newPart,sep="")
  }

  return(output)
}

Мы можем вызвать функцию:

generateRandomSequence("AB",5,2)

Дать результат: "ABuwHpdABWj8eh"

Первый параметр «AB» - это повторяющаяся последовательность.Второй параметр - это количество случайных символов, которые перемежают повторяющуюся последовательность.Третья часть контролирует количество повторений.

...