我想在 R 中实现一个误差加权欧几里德距离函数(与 Kumar & Patel. 2005. Rutcor Research Report. RRR 12-2005 类似但不完全相同)。我已经知道我想为此在代理中使用 pr_DB。这是我遇到问题的地方。在查看新包时,我总是做的第一件事是将示例剪切并粘贴到 R 中,看看它们是否符合我的预期。这不是在这种情况下发生的事情。我从简单的包含示例开始,即:
mydist <- function(x,y) x * y
pr_DB$set_entry(FUN = mydist, names = c("test", "mydist"))
好的,到目前为止,一切都很好。我想,如果它像普通的“dist”类型函数一样工作,我会扔进一个非常简单的数据。
>toydat
x y
a -0.12817993 -1.03238513
b 1.56200731 0.93826937
c -1.24051847 -1.31005852
d -1.12892553 -1.57133401
e -1.10098308 0.06577006
当然,只是一个小玩具套装。SOOOOOO,我尝试以下方法:
toydist <- dist(toydat,method="mydist")
我收到以下消息:
Error in do.call(".External", c(list(CFUN, x, y, pairwise, if (!is.function(method)) get(method) else method), :
not a scalar return value
凭直觉,我尝试了:
toydist <- dist(toydat,method="Euclidean")
toydist <- dist(toydat,method="Manhatten")
和别的。它们都按预期工作。我假设必须对基本公式进行一些特殊处理,才能以适当的方式计算距离矩阵。我要计算的是 sqrt((x i - x j ) 2 ) + (y i - y j ) 2 ) + ...(n i - n j ) 2 ) ÷ sqrt((σx i 2 + σx j 2 ) + (σy i 2 + σy j 2 ) + ...(σn i 2 + σn j 2 )),在我的数据集的每个成对组合中。
我意识到我可以通过电子表格为单个数据集执行此操作,但我想做一些聚类引导,我知道如何在 R 中执行此操作。电子表格不实用。