I have a vector of length 100 and I want to get a sample of certain size like 50, from all permutations of length 20 from elements of my original vector
My attempt so far is to first to get all permutations then select a sample of size 50
First part
All_Permutation = gtools::permutations(n = 100, r = 20, v = 1:100)
Second part
I could not complete because, the first part is taking considerable amount of time and memory
I wonder is there any more manageable way to get that sample?
Try RcppAlgos::permuteSample.
> RcppAlgos::permuteSample(v=1:100, m=20, n=50, seed=42)
      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14] [,15] [,16] [,17] [,18] [,19] [,20]
 [1,]   13   87   36  100   62   58   30   64   49    72    57     2    28    17    41    88    40    85    65    76
 [2,]   45   12   27   18   69   57   52   26    3    29    63    17    11    82    70    50    75    78    38     6
 [3,]   49   11   81   92   15   65   78   67   93    62    46    33    25    73    83    10    57    38    41    56
 [4,]   60   97   72    4   35   19   22   66   37   100    61    81    34    14    40    89    11    13     3    74
 [5,]    7   41   51   56   59   18   32   39   99    97    15    95    83    85     4    84    33    10    91    40
 [6,]   86   43   82   12   33   36   41   96   81    63    26    34    17     4    69    10    53    59    76    71
...
You can also calculate the number of permutations:
> RcppAlgos::permuteCount(v=1:100, m=20)
Big Integer ('bigz') :
[1] 1303995018204712451095685346159820800000
                        I think the method by @jay.sf is the most efficient one as far as I know.
Another implementation use base R could be (but less efficient)
repeat {
  out <- replicate(50, sample(1:100, 20), simplify = FALSE)
  if (!anyDuplicated(out)) break
}
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With