Вариантов может быть много, но проще всего использовать бесконечный цикл. Но перед циклом вам нужно еще 2 функции для подсчета шансов:
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
}
Как правило, он непрерывно дает разные ответы, но останавливается только в том случае, если находит 2 коэффициента и 4 четности.
Весь код вместе:
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
6 9 10 16 17 24
8 9 10 11 14 24