Преобразование вектора в R в нижнюю треугольную матрицу в определенном порядке

У меня есть вектор, в котором важен порядок элементов, скажем

x <- c(1,2,3,4)

Я хотел бы упорядочить свой вектор в нижнюю треугольную матрицу с определенным порядком, где каждая строка содержит предыдущий элемент вектора. Моя цель - получить следующую матрицу

lower_diag_matrix   
       [,1] [,2] [,3] [,4]
[1,]    4    0    0    0
[2,]    3    4    0    0
[3,]    2    3    4    0
[4,]    1    2    3    4

Я знаю, что могу заполнить нижнюю треугольную область, используя lower_diag_matrix[lower.tri(lower_diag_matrix,diag = T)]<-some_vector, но я не могу понять расположение вектора, используемого для заполнения нижней треугольной области. На практике числа будут случайными, поэтому мне понадобится общий способ заполнения области.

Заранее спасибо!


person danluuu    schedule 26.01.2018    source источник


Ответы (1)


Вот один из способов:

x <- c(2, 4, 7)
M <- matrix(0, length(x), length(x))
M[lower.tri(M, diag = TRUE)] <- rev(x)[sequence(length(x):1)]
M
#      [,1] [,2] [,3]
# [1,]    7    0    0
# [2,]    4    7    0
# [3,]    2    4    7
person Julius Vainora    schedule 26.01.2018