генерировать перестановку из числового раздела - PullRequest
0 голосов
/ 23 ноября 2018

я буду генерировать перестановки разделов.я генерирую разделы с этим кодом: библиотека (разделы)

x <- c(2,4,6)       
parts <- listParts(length(x))
out <- rapply(parts, function(ii) x[ii], how="replace") 

и генерирую

out

[[1]]
[1] (2,4,6)

[[2]]
[1] (2,6)(4)

[[3]]
[1] (2,4)(6)

[[4]]
[1] (4,6)(2)

[[5]]
[1] (2)(4)(6)

взять элемент, например [1](2)(4)(6) я бы сгенерировал всевозможные перестановки.Я пытался с:

 library(combinat)
 permn(x)

, но возвращаемый элемент не в той же форме ввода, например, с элементом [1](21,33,41,40,39,3,6)(13,37) return:

[[1]]
[[1]]$`1`
[1] 21 33 41 40 39  3  6

[[1]]$`2`
[1] 13 37


[[2]]
[[2]]$`2`
[1] 13 37

[[2]]$`1`
[1] 21 33 41 40 39  3  6

я делаю аналогичный вопрос через неделюназад, но решение, которое было дано, когда генерируют разделы, генерируют перестановки для всех возможных разделов, но из-за проблемы эффективности я не могу его использовать.решение это было так:

library(partitions)
permListParts <- function (x) 
{
    f <- function(pp) {
        out <- split(seq_along(pp), pp)
        myPerms <- perms(length(out))
        apply(myPerms, 2, function(x) {
            temp <- out[x]
            class(temp) <- c(class(temp), "equivalence")
            temp
        })
    }
    apply(setparts(x), 2, f)}
...