Search code examples
rpermutation

arrangements package - permutations of order 128


I am trying to run a simple permutation of 'x' and 'y' across 128 spaces using the arrangements package on R.

I keep getting the following error message :

    Error in permutations(test, k = 128, replace = TRUE) : too many results

The code that I ran was as follows:

    library(arrangements)
    test <- c('x','y')
    permutations(test, k = 128, replace = TRUE)

sessionInfo() is as follows:

    R version 4.1.2 (2021-11-01)
    Platform: x86_64-apple-darwin17.0 (64-bit)
    Running under: macOS Monterey 12.2.1

Is there a work around I can use? I am also experimenting with the parallel package. Please advice.


Solution

  • That's way too many results as @Rui points out in the comments:

    npermutations(2, 128, replace=TRUE, bigz = TRUE)
    Big Integer ('bigz') :
    [1] 340282366920938463463374607431768211456
    

    How about using the skip and nitem parameters? This allows a user to retrieve a handful of results at a time.

    ## First 100,000 results
    system.time(res <- permutations(c('x', 'y'), 128, replace = TRUE, nitem = 1e5))
    # user  system elapsed 
    # 0.146   0.000   0.146
    
    ## process res
    
    ## Next 100,000 results
    res <- permutations(c('x', 'y'), 128, replace = TRUE, skip = 1e5, nitem = 1e5)
    
    ## process res
    
    ## 100,000 results starting at leixcographical index 1e19 + 1
    ## n.b. need to use strings or bigz type
    res <- permutations(c('x', 'y'), 128, replace = TRUE,
                        skip = "10000000000000000000", nitem = 1e5)
    
    ## process res
    ## etc.
    

    This can easily be generalized to parallel processing if needed.