Compute Gower distances for a row subset — use in a loop to handle large trait matrices in memory-safe blocks.
compute_gower_block <- function(start_idx, end_idx, traits_data) {
block_data <- traits_data[start_idx:end_idx, , drop = FALSE]
gower_dist_block <- daisy(block_data, metric = "gower")
return(as.matrix(gower_dist_block))
}