我正在尝试生成一系列包含重复图案并穿插随机字母的特定字母序列。
例如:ABXXXXXXXABXXXXXXXABXXXXXXX,其中 X = A、B、C 或 D,随机选择。
我还需要指定序列的总长度、更改重复的字母以及它们重复的频率(例如每 5 个字符重复一次 BC)。
遗憾的是,我只能够生成随机序列,但没有包含重复字母的功能:
set.seed(42)
x <- sample(letters[c(1, 2, 3, 4)], size=200, replace = TRUE)
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" 是重复序列。第二个参数是插入在重复序列中的随机字符数。第三部分控制重复次数。
AB
之间随意加入一些字母,使得最终结果像ABxxxxxxABxxxxxxAB
这样,那么这些随机的字母也有可能是AB
,因此实际上出现的次数不只是3次,而更多。如何处理这种情况?你会区分大小写字母吗?固定的字母用大写表示,样本中的字母用小写表示可以解决这个问题。 - Sotos