1
$\begingroup$

I am pretty weak on the notion of pure functions, etc. I found a clean solution to my problem so in a sense I've already answered my own question but I don't feel I'm on terra firma.

I wanted to take a random sample from a list of lists with a different sample size for each list in the list of lists. I did the following which is clean and readable by the cognoscenti. I'll probably have trouble understanding this in a year. Comments and/or suggestions of better ways will be appreciated.

listoflists = {{1, 2, 3, 4}, {5, 6, 7}, {8, 9}, {10, 11, 12, 13}};

samplesizes = {2, 3, 1, 3};

out=Apply[RandomSample, Transpose[{listoflists, samplesizes}], {1}]
$\endgroup$
3
  • $\begingroup$ The best solution is the one in the answer. I just wanted to note that you can write "Apply at level 1" as RandomSample @@@ Transpose[{listoflists, samplesizes}]. I find this more readable because I don't have to scan to the end of the expression to find the {1} part. It might not be easier to remember what it does in a year's time though. I do in fact use this frequently when the Transpose[{listoflists, samplesizes}] part is already constructed and stored somewhere. $\endgroup$
    – Szabolcs
    Commented Mar 20, 2014 at 20:51
  • $\begingroup$ If it goes about clarity, also adding slots could help. RandomSample[#, #2] & @@@ is longer but maybe one will find it better. Or Table[RandomSample[listoflists[[i]], samplesizes[[i]]], {i, 4}] $\endgroup$
    – Kuba
    Commented Mar 20, 2014 at 20:52
  • $\begingroup$ Duplicates: (3217), (10211), (15556), (26858), (32569), (71988) $\endgroup$
    – Mr.Wizard
    Commented May 24, 2015 at 13:35

2 Answers 2

5
$\begingroup$

Probably:

MapThread[RandomSample, {listoflists, samplesizes}]

is easier to understand

$\endgroup$
4
  • 3
    $\begingroup$ Especially with this reference.wolfram.com/legacy/flash $\endgroup$
    – Kuba
    Commented Mar 20, 2014 at 21:07
  • $\begingroup$ Greeeaat!:) I haven't seen it before $\endgroup$ Commented Mar 20, 2014 at 21:22
  • 2
    $\begingroup$ @Kuba The Select[] one is worth trying $\endgroup$ Commented Mar 20, 2014 at 21:24
  • $\begingroup$ @belisarius This question clearly has been asked many times before. I posted several duplicate links above. Please choose one and vote to close. $\endgroup$
    – Mr.Wizard
    Commented May 24, 2015 at 13:36
1
$\begingroup$

With global warming, characters are endangered. Save one... :-)

Inner[RandomSample, listoflists, samplesizes, List]
$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.