如何生成具有随机字符穿插的重复主题的序列

问题描述 投票:4回答:2

我正在尝试生成一系列包含重复主题的字母序列,其中散布着随机字母。

例如:ABXXXXXXXABXXXXXXXABXXXXXXX,其中X = A,B,C或D,随机选择。

我还需要指定序列的总长度,更改重复的字母以及它们这样做的频率(例如,使BC重复每5个字符)。

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

set.seed(42)
x <- sample(letters[c(1, 2, 3, 4)], size=200, replace = TRUE)
r random sequence
2个回答
1
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.