我正在尝试生成一系列包含重复主题的字母序列,其中散布着随机字母。
例如:ABXXXXXXXABXXXXXXXABXXXXXXX,其中X = A,B,C或D,随机选择。
我还需要指定序列的总长度,更改重复的字母以及它们这样做的频率(例如,使BC重复每5个字符)。
遗憾的是,我只能生成包含选定字符的定义长度的随机序列:
set.seed(42)
x <- sample(letters[c(1, 2, 3, 4)], size=200, replace = TRUE)
这是一个自定义函数,每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"
构建一个使用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”是重复序列。第二个参数是散布重复序列的随机字符数。第三部分控制重复次数。