从R中的对角线逐行减去负矩阵元素

时间:2014-08-22 13:08:19

标签: r

我有一个示例矩阵:

p <- matrix(c(0.5, 0.3, 0.3, -0.1, 0.6, 0.7, -0.2, -0.1), ncol = 4, byrow = T)

> p
     [,1] [,2] [,3] [,4]
[1,]  0.5  0.3  0.3 -0.1
[2,]  0.6  0.7 -0.2 -0.1

每行有一个或多个负面元素。最大的元素是在对角线上。 我想创建一个函数,它从行对角线减去对角线的负值,然后将这些元素设置为零,这样行总和再次为1.

我自己尝试使用apply函数但直到现在都没有运气。 希望有人能帮助我。

祝福 采煤机

1 个答案:

答案 0 :(得分:4)

这是一种方式:

negs <- p < 0
diag(p) <- diag(p) + rowSums(replace(p, ! negs, 0))
p[negs] <- 0
#      [,1] [,2] [,3] [,4]
# [1,]  0.4  0.3  0.3    0
# [2,]  0.6  0.4  0.0    0