Thanks – indeed, collect() struck me as something to be avoided, but since I was wrongly using hcat* instead of vcat I mistakenly assumed I needed to explicitly expand the ranges before combining them.
It often seems obvious in hindsight, but not when typing new things in a new language.
*: (Though by some unfortunate coincidence my code with hcat did work – all the ranges had the same number of elements in my original example)