我有以下代码使用FNN 包:
k <- knn(train, test, labels, k = 10, algorithm="cover_tree")
我可以使用下面的代码查看调用 knn 返回的数据:
> attr(k, "nn.dist")[1,]
[1] 1385.398 1687.901 1722.884 1846.694 1978.250 1998.157 2003.518 2004.494 2054.382 2059.128
> attr(k, "nn.index")[1,]
[1] 983 362 170 303 914 843 480 489 474 355
我想做的是nn.dist
根据nn.index
.
我知道这可能没有意义,但为了争论,我将如何将每个值设置nn.dist
为nn.dist * nn.index/1000
?
所以attr(k, "nn.dist")[1,1]
会从1385.398
到1385.398*983/1000
(1361.846)
并且
attr(k, "nn.dist")[1,2]
会从1687.901
到1687.901*362/1000
(611.02)等。
我可以使用以下代码一次执行此操作:
attr(k, "nn.dist")[1,1] = attr(k, "nn.dist")[1,1]*attr(k, "nn.index")[1,1]/1000
但我需要一种方法来对每个元素执行此操作,而不是每次都编写它......