【发布时间】:2022-01-23 12:58:00
【问题描述】:
我阅读paper 并尝试实现算法2:
其中 ave(x,y)=2xy/(x+y)。
我找到了D1,D2:
> dput(D1)
structure(c(0, 0, 0.316227766016838, 0.316227766016838, 0.316227766016838,
0, 0, 0.316227766016838, 0.316227766016838, 0.316227766016838,
0.316227766016838, 0.316227766016838, 0, 0.316227766016838, 0.447213595499958,
0.316227766016838, 0.316227766016838, 0.316227766016838, 0, 0.316227766016838,
0.316227766016838, 0.316227766016838, 0.447213595499958, 0.316227766016838,
0), .Dim = c(5L, 5L), .Dimnames = list(c("1", "4", "5", "7",
"9"), c("1", "4", "5", "7", "9")))
> dput(D2)
structure(c(0, 0.447213595499958, 0.316227766016838, 0, 0.447213595499958,
0.447213595499958, 0, 0.316227766016838, 0.447213595499958, 0,
0.316227766016838, 0.316227766016838, 0, 0.316227766016838, 0.316227766016838,
0, 0.447213595499958, 0.316227766016838, 0, 0.447213595499958,
0.447213595499958, 0, 0.316227766016838, 0.447213595499958, 0
), .Dim = c(5L, 5L), .Dimnames = list(c("1", "5", "7", "8", "10"
), c("1", "5", "7", "8", "10")))
然后我定义了 i、j 和 r 索引:
> dput(i)
c("4", "9")
> dput(j)
c("8", "10")
> dput(r)
c("1", "5", "7")
最后
k = length(I)
D = matrix(0, k, k)
x = min( D1[i, r] + D2[j, r])
y = max(abs(D1[i, r] - D2[j, r]))
D = 2*x*y/(x+y)
执行的答案是对称的 2x2 矩阵,但我有
> D
[1] 0
另外,我尝试过使用apply 函数:
x = apply( D1+D2, 1, function(x) min(x))
y = apply(abs( D1-D2 ), 1, function(x) max(x))
D = 2*x*y/(x+y)
答案是向量:
> D
1 4 5 7 9
0 0 0 0 0
问题。如何找到具有指定索引的列的 min()、max()?
【问题讨论】: