gpt4 book ai didi

r - 强制 "dist"对角线为 1

转载 作者:行者123 更新时间:2023-12-04 11:47:20 43 4
gpt4 key购买 nike

是否可以将 stats 包中的距离对象强制为 0 以外的值?

在这里,我尝试将其强制为其他内容,我可以更改上部或下部但不能更改对角线:

set.seed(10)
x <- matrix(rnorm(25), ncol = 5)
y <- dist(x, diag =TRUE)
z <- 1 - as.matrix(y)
as.dist(z, diag =TRUE)

给出:
           1          2          3          4          5
1 0.0000000
2 -0.9030066 0.0000000
3 -0.9803571 -1.9319785 0.0000000
4 -1.5249747 -2.3673155 -1.5928891 0.0000000
5 -2.7903980 -2.8020380 -2.2491893 -1.5839067 0.0000000

而不是预期的:
           1          2          3          4          5
1 1.0000000
2 -0.9030066 1.0000000
3 -0.9803571 -1.9319785 1.0000000
4 -1.5249747 -2.3673155 -1.5928891 1.0000000
5 -2.7903980 -2.8020380 -2.2491893 -1.5839067 1.0000000

也许我必须将它作为矩阵对象输出,因为强制对角线不是 0 会导致它不符合处理“dist”对象的方式。

最佳答案

不与 dist() ;它不存储对角线,只是一个标志,表明它是否应该通过 print() 打印方法。

这并非意外。 dist()是一种存储距离矩阵的紧凑方式,而不是一般的对称矩阵。在距离矩阵中,根据定义,观测值与其自身之间的距离为 0。因此 dist()将对角线视为微不足道的东西并且不存储它。

如果我想做你想做的事,我会用dist()的勇气并将数据存储为 dist()确实,在一个函数中,说 mydist()与类(class) "mydist" ,然后写 print.mydist()print.dist() 获取代码方法,但对角线使用另一个值,并写成 as.matrix.mydist()进行矩阵的转换。您的类可以存储对角线的值(如果它们不同)或仅存储您希望对角线的单个值。

基本上,您需要做的就是将您想要的对角线值存储为一个额外的属性,然后提供 print()as.matrix()从该属性中提取以打印或填充矩阵的方法。

关于r - 强制 "dist"对角线为 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14549177/

43 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com