枚举来自k个项目的大小N的所有组合,其中N> 1。 ķ

时间:2014-12-17 14:40:22

标签: r sampling

我遇到问题,我有k个项目,比如{0,1},我必须列举所有可能的N抽奖,比如说N=3。也就是说,我试图从矢量中找到给定大小的所有可能样本,并替换。

我可以通过以下循环方法到达那里:

for (i1 in c(0,1)){
    for (i2 in  c(0,1)){
        for (i3 in c(0,1)){
             print(paste(i1,i2i3,collapse="_")) 
}}} 

然而,这感觉就像一个kludge。使用基础R有更好的方法吗?

2 个答案:

答案 0 :(得分:5)

您可以使用interaction

items <- c(0, 1)
n <- 3

levels(interaction(rep(list(items), n), sep = "_"))
# [1] "0_0_0" "1_0_0" "0_1_0" "1_1_0" "0_0_1" "1_0_1" "0_1_1" "1_1_1"

答案 1 :(得分:4)

如果vec是你的向量而n是你从vec中抽取的次数,为了枚举所有可能性,请尝试:

  expand.grid(replicate(n,vec,simplify=FALSE),
       KEEP.OUT.ATTRS=FALSE,stringsAsFactors=FALSE)

例如:

 vec<-0:1
 n<-3
 expand.grid(replicate(n,vec,simplify=FALSE),
       KEEP.OUT.ATTRS=FALSE,stringsAsFactors=FALSE)
 #   Var1 Var2 Var3
 #1    0    0    0
 #2    1    0    0
 #3    0    1    0
 #4    1    1    0
 #5    0    0    1
 #6    1    0    1
 #7    0    1    1
 #8    1    1    1  

排列的数量迅速增加;尝试以上仅针对小向量和小n