R: Итерация вектора путем удаления и добавления переменных для цикла - PullRequest
1 голос
/ 03 апреля 2019

Рассмотрим вектор:

dim <- c("a", "b", "c", "d")

Я хочу иметь возможность создавать версии вектора, отбрасывая некоторые переменные, а затем используя обновленный вектор для моего цикла.

Например:

Я хочу, чтобы он перебрал все возможные векторы, которые могут быть получены в результате:

    dim <- c("a", "b", "d")

И так далее, и тому подобное. Могу ли я сделать это в цикле или как-то, что мне не нужно ничего указывать. Порядок не имеет значения, поэтому я не хочу a, b, c и c, a, b

Ответы [ 3 ]

1 голос
/ 03 апреля 2019

Вы можете получить это с:

dim <- c("a", "b", "c", "d")
> Map(combn, list(dim), 1:length(dim))

[[1]]  # All combinations of size 1
     [,1] [,2] [,3] [,4]
[1,] "a"  "b"  "c"  "d" 

[[2]]  # All combinations of size 2
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,] "a"  "a"  "a"  "b"  "b"  "c" 
[2,] "b"  "c"  "d"  "c"  "d"  "d" 

[[3]]  # All combinations of size 3
     [,1] [,2] [,3] [,4]
[1,] "a"  "a"  "a"  "b" 
[2,] "b"  "b"  "c"  "c" 
[3,] "c"  "d"  "d"  "d" 

[[4]]  # All combinations of size 4
     [,1]
[1,] "a" 
[2,] "b" 
[3,] "c" 
[4,] "d" 
0 голосов
/ 03 апреля 2019

В базе R Я бы использовал for -loop, sapply или lapply

for -loop

for (i in seq_along(dim)) {
  print(dim[-i])
}

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

sapply

t( sapply(seq_along(dim), function(i) dim[-i]) )

     [,1] [,2] [,3]
[1,] "b"  "c"  "d" 
[2,] "a"  "c"  "d" 
[3,] "a"  "b"  "d" 
[4,] "a"  "b"  "c" 

lapply

lapply(seq_along(dim), function(i) dim[-i])

[[1]]
[1] "b" "c" "d"

[[2]]
[1] "a" "c" "d"

[[3]]
[1] "a" "b" "d"

[[4]]
[1] "a" "b" "c"
0 голосов
/ 03 апреля 2019

если вы ищете все комбинации dim, вы можете проверить функцию combn из пакета combinat:

combinat::combn(letters[1:4], 1, simplify = F)

    [[1]]
[1] "a"

[[2]]
[1] "b"

[[3]]
[1] "c"

[[4]]
[1] "d"

combinat::combn(letters[1:4], 2, simplify = F)
combinat::combn(letters[1:4], 3, simplify = F)
combinat::combn(letters[1:4], 4, simplify = F)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...