Как создать перестановки логического вектора? - PullRequest
0 голосов
/ 15 января 2019

Есть ли функция, которая поможет мне вывести все 2 ^ n перестановок логического вектора длины n? Например, если у меня есть логический вектор длины n = 2, c (FALSE, FALSE), я должен получить 2 ^ 2 = 4 перестановки.

Как таковая, мне нужна функция, которая будет обобщать этот вывод для массива длины n, это означает, что если n = 3, вывод должен иметь длину 2 ^ 3 и так далее ...

Я уже пробовал перестановки из пакета gtools, но это, похоже, неверно или дает, по меньшей мере, частичный ответ. Этот метод не очень хорошо обобщает и дает ошибки при n> 2.

> permutations(2,2,c(TRUE,FALSE))
      [,1]  [,2]
[1,] FALSE  TRUE
[2,]  TRUE FALSE

Вывод должен быть:

FALSE, FALSE,
TRUE, TRUE,
FALSE, TRUE,
TRUE, FALSE

Ответы [ 3 ]

0 голосов
/ 15 января 2019

Вы пропали без вести repeats.allowed=T:

gtools::permutations(2,2, c(T,F), repeats.allowed = T)

      [,1]  [,2]
[1,] FALSE FALSE
[2,] FALSE  TRUE
[3,]  TRUE FALSE
[4,]  TRUE  TRUE

Вы можете сделать свою пользовательскую функцию около permutations:

my_permute <- function(vect, n, repeats = TRUE) {

  gtools::permutations(length(vect), n, vect, repeats.allowed = repeats)
}

my_permute(vect=c(T,F), n=2) 

Пример с большим количеством элементов:

my_permute(letters[1:3], n=3)
0 голосов
/ 15 января 2019

Вы можете использовать пакет gtools и функцию перестановок : Это исходный код:

library(gtools)
x <- c(TRUE, FALSE)
permutations(n=length(x),r=2,v=x,repeats.allowed=T)
0 голосов
/ 15 января 2019

Вы можете использовать expand.grid,

expand.grid(c(TRUE, FALSE), c(TRUE, FALSE))
#   Var1  Var2
#1  TRUE  TRUE
#2 FALSE  TRUE
#3  TRUE FALSE
#4 FALSE FALSE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...