Проблемы с оценкой комбинаций из комбинации с помощью мурлыканья - PullRequest
0 голосов
/ 11 июля 2019

Я пытаюсь использовать combn, чтобы разделить группу из n = 20 различных единиц на 3 группы неравного размера - 4, 6 и 10. Затем я пытаюсь проверить значения, которые должны быть вместе в группе -если один элемент из пары существует в группе, то другой также должен быть в группе.Если кто-то не в группе, то ни один не должен быть в группе.Таким образом, я хотел бы оценить группы, чтобы найти все возможные допустимые решения, где правила верны.

x <- letters[1:20]

same_group <- list(
  c("a", "c"),
  c("d", "f"),
  c("b", "k", "r")
)

combinations_list <- combn(x, 4, simplify = F)

validate_combinations <- function(x) all(c("a", "c") %in% x) | !any(c("a", "c") %in% x)

valid_combinations <- keep(combinations_list, validate_combinations)

Таким образом, я хотел бы объединить -> уменьшать каждую группу доУ меня есть список всех допустимых комбинаций.Я не уверен, как объединить комбинации комбинации, список валидированных_комбинаций и группу same_group, чтобы проверить все "правила" same_group относительно комбинаций в таблице.Самое большее, что я могу получить, - это проверить одну комбинацию c ("a", "c"), которая при запуске против keep (комбинаций_листов, validate_combination) действительно дает мне желаемый результат.

Думаю, однаждыЯ могу сделать это, затем я могу использовать невыбранные значения в другой функции combn для группы из 6 и группы из 10.

1 Ответ

0 голосов
/ 12 июля 2019

Мы можем изменить функцию, чтобы она принимала группу переменных

validate_combinations <- function(x, group) all(group %in% x) | !any(group %in% x)

, а затем для каждого group подмножества combinations_list, которые удовлетворяют validate_combinations

lapply(same_group, function(x)  combinations_list[
       sapply(combinations_list, function(y) validate_combinations(y, x))])


#[[1]]
#[[1]][[1]]
#[1] "a" "b" "c" "d"

#[[1]][[2]]
#[1] "a" "b" "c" "e"

#[[1]][[3]]
#[1] "a" "b" "c" "f"

#[[1]][[4]]
#[1] "a" "b" "c" "g"

#[[1]][[5]]
#[1] "a" "b" "c" "h"

#[[1]][[6]]
#[1] "a" "b" "c" "i"

#[[1]][[7]]
#[1] "a" "b" "c" "j"

#[[1]][[8]]
#[1] "a" "b" "c" "k"
#......
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...