Проблема довольно глупа, но мне интересно, не хватает ли я чего-то.
Скажем, что существует вектор k
, который содержит некоторые числа, скажем,
> k
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Я хочу преобразовать это в матрицу
> m
[,1] [,2] [,3] [,4] [,5]
[1,] 1 2 3 4 5
[2,] 0 6 7 8 9
[3,] 0 0 10 11 12
[4,] 0 0 0 13 14
[5,] 0 0 0 0 15
Моя первая идея заключалась в том, чтобы использовать что-то с upper.tri()
, например, как m[upper.tri(m, diag = TRUE)] <- k
, но это не даст вышеприведенной матрицы.
Есть ли более интеллектуальное решение? Ниже мое решение, но позвольте сказать, что я не слишком этому горжусь.
rows <- rep(1:5, 5:1)
cols1 <- rle(rows)$lengths
cols <- do.call(c, lapply(1:length(cols1), function(x) x:5))
for(i in 1:length(k)) {
m[rows[i], cols[i]] <- k[i]
}