我想在R中实现误差加权的欧氏距离函数(与Kumar& Patel.2005相似但不完全相同.Rutcor研究报告.RAD 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 < / sup> +σn j 2 )),在我的数据集的每个成对组合中。
我意识到我可以通过电子表格为单个数据集执行此操作,但我想进行一些群集引导,我知道如何在R中执行。不适用于电子表格。
答案 0 :(得分:0)
现在已经过了必要的时间,我可以正式关闭它。我想出的功能是:
DistErrAdj <- function(x,y) {
sing.err <- sqrt((x^2) + (y^2))
sum(sing.err)
}