1

我想在 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 中执行此操作。电子表格不实用。

4

1 回答 1

0

现在已经过了必要的时间,我可以正式结束了。我想出的功能是:

DistErrAdj <- function(x,y) {
sing.err <- sqrt((x^2) + (y^2))
sum(sing.err)
}
于 2013-08-07T14:38:27.147 回答