我有一个示例矩阵:
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函数但直到现在都没有运气。 希望有人能帮助我。
祝福 采煤机
答案 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