我在R
中运行以下代码。它基本上根据我选择的每个random
的数字频率输出6个list
数字。
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)
list2<- unlist(sapply(seq_along(foo), function(x) sample(foo[[x]], names(foo[x]))))
sort(list2)
因此,上面的代码将输出6个random
数字(第1列表3个,第2个列表2个,第3个列表1个,第4个列表没有)。
我还希望能够在这些代码中添加在最终输出中选择odd
数和even
数的选择。
假设我想保留现有代码,但我希望输出是4个even
数和2个odd
数的混合。
我怎样才能做到这一点?
可能有很多选项,但最简单的方法是使用无限循环。但是,在循环之前,您还需要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)
结果是: