如何编写函数在R中从右上角到左下角创建对角矩阵?

Son*_*ang 2 r

我想编写一个函数,其输入是一个方形矩阵,它返回一个方形矩阵,从右上角到左下角的数字被保留,其他数字为零.

例如,假设A是下面的4*4矩阵.(抱歉,我不知道如何输入矩阵表达式)

[1,2,3,4]
[5,6,7,8]
[9,10,11,12]
[13,14,15,16]
Run Code Online (Sandbox Code Playgroud)

如何在没有任何循环的情况下在R中编写函数将矩阵转换为此?

[0,0,0,4]
[0,0,7,0]
[0,10,0,0]
[13,0,0,0]
Run Code Online (Sandbox Code Playgroud)

Rom*_*rik 5

这感觉就像是一次体操运动......

xy <- matrix(1:16, ncol = 4, byrow = TRUE)

xy <- apply(xy, MARGIN = 1, rev)

xy[lower.tri(xy)] <- 0
xy[upper.tri(xy)] <- 0

t(apply(xy, MARGIN = 1, rev))

     [,1] [,2] [,3] [,4]
[1,]    0    0    0    4
[2,]    0    0    7    0
[3,]    0   10    0    0
[4,]   13    0    0    0
Run Code Online (Sandbox Code Playgroud)