如何生成一个序列,其中重复出现的主题散布着随机字符

How to generate a sequence with a recurring motif that is interspersed with random characters

我正在尝试生成一系列特定字母,其中包含一个重复的主题,其中点缀着随机字母。

例如:ABXXXXXXXABXXXXXXXABXXXXXXX,其中 X = A、B、C 或 D,select随机生成。

我还需要指定序列的总长度,更改重复的字母以及重复的频率(例如,让 BC 每 5 个字符重复一次)。

遗憾的是,我只能生成定义长度的随机序列,包含 select 个字符:

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

构建一个使用 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"是重复序列。第二个参数是散布在重复序列中的随机字符数。第三部分控制重复次数

这是一个自定义函数,每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"