Note that using vcat in this way is unnecessarily slow both at compile time (because you end up calling a function with n arguments, and n can be very large), and at run time (because Julia isn’t well-optimized to handle function calls with huge numbers or arguments).
(I’m demonstrating here with hcat instead, since that seems closer to the loop result in the original code, but the result applies to vcat or hcat).
For example:
julia> data = [rand(3) for _ in 1:1000000];
julia> @btime hcat($data...);
38.808 ms (7 allocations: 38.15 MiB)
You’ll get the same result with better performance from reduce(hcat, ...), like this:
julia> @btime reduce(hcat, $data);
13.763 ms (2 allocations: 22.89 MiB)