2014-12-17 3 views
0

У меня проблема, когда у меня есть k предметов, скажем {0,1}, и я должен перечислить все возможные N ничьи, скажем N=3. То есть, я пытаюсь найти все возможные образцы заданного размера из вектора с заменой.Перечислите все комбинации размера N из k элементов с N> k

я могу получить там с помощью следующего подхода петли:

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

Однако, это чувствует, как ляп. Есть ли лучший способ сделать это, используя базу R?

+0

Хороший вопрос, +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.

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" 
Смежные вопросы