1. Yes, in "analysis_random_graphs", it saves the random graphs individually, and then combines them later. I had noticed long ago that this resulted in a significant memory improvement; otherwise, as you have discovered, it can be untenable if you have a large number of subjects X thresholds X random graphs.
2. Yes, you should look at the group-level graphs in that case. However, since you do have single-subject graphs, you can get summary statistics by using the individual values.
3. The reason the code is listed as that can be seen by inspecting Equation 4 in Telesford et al. (2011). The "Lp.rand" should come from the "standard" random graphs, while the "Cp.rand" should be from the random graphs controlling for clustering (called "C_latt" in the paper). In fact the code could probably be simplified somewhat further as
small.dt[, omega := (Lp.rand / Lp) - small.clust.dt[, Cp / Cp.rand]]
or perhaps better,
small.dt[, Cp.latt := small.clust.dt$Cp.rand]
small.dt[, omega := (Lp.rand / Lp) - (Cp / Cp.latt)]
although in this case, it would require that the rows in both "small.dt" and "small.clust.dt" are exact matches. The final line of code could also be
Chris