您可以有许多选择,但最简单的是使用无限循环。但是,在循环之前,还需要两个函数来计算几率:
is.odd <- function(x) x %% 2 != 0
countOdds<-function(dt){ sum(sapply(dt, is.odd)) }
然后循环是:
while(T){
list2<- unlist(sapply(seq_along(foo), function(x) sample(foo[[x]], names(foo[x]))))
if(countOdds(list2)==2)
break
}
一般来说
连续不断地
整个代码是:
foo <- list(
c(1,2,3,4,5,6,7,8,9,10),
c(11,12,13,14,15,16,17,18,19,20),
c(21,22,23,24,25,26,27,28,29,30),
c(31,32,33,34,35,36,37,38,39,40)
)
names(foo) <- c(3, 2, 1, 0)
is.odd <- function(x) x %% 2 != 0
countOdds<-function(dt){ sum(sapply(dt, is.odd)) }
while(T){
list2<- unlist(sapply(seq_along(foo), function(x) sample(foo[[x]], names(foo[x]))))
if(countOdds(list2)==2)
break
}
sort(list2)
结果是:
4 6 7 11 12 30