Преобразовать вектор-столбец в диагональ матрицы в R?

У меня есть вектор-столбец со следующим форматом в R: num [1: 2464, 1].

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

diagvector <- diag(myvector)

Но тогда он просто показывает первое число. Думаю, я могу использовать этот код, только если мой вектор имеет следующую форму: num [1: 2464].

Итак, как мне а) изменить формат с num [1: 2464, 1] на num [1: 2464] для моего вектора или b) перенести диагональ к моему вектору в формате num [1: 2464, 1]?


person Michael    schedule 17.09.2019    source источник


Ответы (1)


Ваш "вектор-столбец" на самом деле является матрицей, поскольку он имеет два измерения, но его можно преобразовать в вектор.

myvector <- matrix(1:2464, 1)
diagvector <- diag(c(myvector))
diagvector
        [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13]    ...
   [1,]    1    0    0    0    0    0    0    0    0     0     0     0     0
   [2,]    0    2    0    0    0    0    0    0    0     0     0     0     0
   [3,]    0    0    3    0    0    0    0    0    0     0     0     0     0
   [4,]    0    0    0    4    0    0    0    0    0     0     0     0     0
   [5,]    0    0    0    0    5    0    0    0    0     0     0     0     0
   [6,]    0    0    0    0    0    6    0    0    0     0     0     0     0
   [7,]    0    0    0    0    0    0    7    0    0     0     0     0     0
   [8,]    0    0    0    0    0    0    0    8    0     0     0     0     0
   [9,]    0    0    0    0    0    0    0    0    9     0     0     0     0
  [10,]    0    0    0    0    0    0    0    0    0    10     0     0     0
  [11,]    0    0    0    0    0    0    0    0    0     0    11     0     0
  [12,]    0    0    0    0    0    0    0    0    0     0     0    12     0
  [13,]    0    0    0    0    0    0    0    0    0     0     0     0    13
    ...

Or:

myvector <- matrix(1:2464, 1)
diagvector <- diag(length(myvector)) * c(myvector)
diagvector
person LegendofPedro    schedule 17.09.2019