将元素添加到R中非正方形矩阵的对角线上



我希望能够将一个值(在我的代码nug中)添加到矩阵的I,j条目,其中I=j(就像Kronecker delta函数)。当矩阵是正方形时,这很容易做到(请参阅下面的代码),但当矩阵不是正方形时,我不确定如何在一行中完成

nug = 2
R = tau + diag(nug,nrow(tau))

上面的代码在tau是平方矩阵时工作,但现在假设tau不是平方。如何将nug添加到tau的I,j个元素中的每一个,其中I=j?

m <- matrix(1:6, ncol = 2)
m
     [,1] [,2]
[1,]    1    4
[2,]    2    5
[3,]    3    6
diag(m) <- diag(m) + 1:2
m
     [,1] [,2]
[1,]    2    4
[2,]    2    7
[3,]    3    6

您可以这样做:

m[col(m)==row(m)] <- m[col(m)==row(m)] +nug 

使用零矩阵来显示:

m <- matrix(rep(0,6), ncol = 2)
> m[col(m)==row(m)] <- m[col(m)==row(m)] +2
> m
     [,1] [,2]
[1,]    2    0
[2,]    0    2
[3,]    0    0

最新更新