我遇到问题,我有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有更好的方法吗?
答案 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
。