Я думаю, что ваш подход уже достаточно хорош, вот другой способ, инициализируя матрицу и используя rep
для заполнения диагоналей.
n <- 4
mat <- matrix(0, ncol = n, nrow = n)
diag(mat) <- rep(vec, n/2)
mat
# [,1] [,2] [,3] [,4]
#[1,] 0.5 0.0 0.0 0.0
#[2,] 0.0 0.6 0.0 0.0
#[3,] 0.0 0.0 0.5 0.0
#[4,] 0.0 0.0 0.0 0.6
и следуя вашему подходу, вы можете сделать
diag(rep(vec, n/2))