我希望能够生成一个(伪)随机二进制序列(例如,R和L的序列,如RLLRRLR),它被平衡,使得相同的项目在序列中不会连续出现两次以上,并且如果我,例如,有一个20个的序列,我得到每个序列中的10个.R中有没有一个函数可以做这样的事情?
我试着自己写一个这样的函数.以下是try :
RL_seq <- function(n_L = 10, n_R = 10, max_consec = 2, initial_seq = NULL) {
while(n_L > 0 | n_R > 0){
side <- sample(c("R", "L"), 1)
if (side == "R" & n_R > 0 & length(grep("R", tail(initial_seq, max_consec))) != max_consec) {
initial_seq <- append(initial_seq, side)
n_R <- n_R - 1
} else if (side == "L" & n_L > 0 & length(grep("L", tail(initial_seq, max_consec))) != max_consec) {
initial_seq <- append(initial_seq, side)
n_L <- n_L - 1
}
}
print(initial_seq)
}
# The function does not stop with the following seed
set.seed(1)
RL_seq()
然而,代码是否卡住取决于运气.我还希望我可以改变序列的规则(例如,允许连续3个R),但如果我touch 参数,代码往往会中断.在这一点上,如果我可以使用默认参数运行它,而不是让它卡住,我会很高兴.
我找遍了,也找不到答案.如有任何帮助,我们不胜感激.另外,我对编程比较陌生,我是自学成才的,我以前从来没有在堆栈溢出上发布过任何东西,所以我提前道歉.