# Functions of two arguments

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}]

-
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. –  Szabolcs Mar 20 at 20:51
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}] –  Kuba Mar 20 at 20:52

Probably:

MapThread[RandomSample, {listoflists, samplesizes}]


is easier to understand

-
Especially with this reference.wolfram.com/legacy/flash –  Kuba Mar 20 at 21:07
Greeeaat!:) I haven't seen it before –  belisarius Mar 20 at 21:22
@Kuba The Select[] one is worth trying –  belisarius Mar 20 at 21:24

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

Inner[RandomSample, listoflists, samplesizes, List]

-