【发布时间】:2021-10-15 16:56:39
【问题描述】:
我有一个对角元素为零的对称矩阵:
set.seed(42)
m<-matrix(runif(25),5)
m[lower.tri(m)] = t(m)[lower.tri(m)]
diag(m)<-0
m
[,1] [,2] [,3] [,4] [,5]
[1,] 0.0000000 0.5190959 0.4577418 0.9400145 0.9040314
[2,] 0.5190959 0.0000000 0.7191123 0.9782264 0.1387102
[3,] 0.4577418 0.7191123 0.0000000 0.1174874 0.9888917
[4,] 0.9400145 0.9782264 0.1174874 0.0000000 0.9466682
[5,] 0.9040314 0.1387102 0.9888917 0.9466682 0.0000000
除了每列中的最小元素外,我需要对对角线以下的所有元素添加 -1:
预期结果是:
[,1] [,2] [,3] [,4] [,5]
[1,] 0.0000000 -1.0000000 -1.0000000 -1.0000000 -1.0000000
[2,] -1.0000000 0.0000000 -1.0000000 -1.0000000 -1.0000000
[3,] 0.4577418 -1.0000000 0.0000000 -1.0000000 -1.0000000
[4,] -1.0000000 -1.0000000 0.1174874 0.0000000 -1.0000000
[5,] -1.0000000 0.1387102 -1.0000000 0.9466682 0.0000000
我的尝试是:
for (i in 2:ncol(m))
#if (m[,i] > 0)
x <- pmin(x, m[,i])
x
min = which(m == min(m), arr.ind = TRUE)
min
问题。如何在对角元素上添加条件?
【问题讨论】:
-
在您的示例输出中,您所追求的是令人困惑的地方:(1)所有元素期望每列中的最小值应该是
-1或(2)空间上低于对角线的所有元素应该是-1,除了最小值或(3)值低于诊断值0的所有元素都应该是-1,除了最小值? -
为什么在您的预期输出中,第 2 列中的
0.5190959设置为-1? -
我已经更新了输出