Take the 2-minute tour ×
Mathematica Stack Exchange is a question and answer site for users of Mathematica. It's 100% free, no registration required.

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}]
share|improve this question
    
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
add comment

2 Answers 2

Probably:

MapThread[RandomSample, {listoflists, samplesizes}]

is easier to understand

share|improve this answer
3  
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
2  
@Kuba The Select[] one is worth trying –  belisarius Mar 20 at 21:24
add comment

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

Inner[RandomSample, listoflists, samplesizes, List]
share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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