【发布时间】:2017-02-15 16:10:49
【问题描述】:
我有一个数据框,tmp:
class x y
1 A -2.8959969 -0.3192259
2 B -0.2401775 0.5801373
我计算 dist(tmp, method="euclidean", diag=TRUE, upper=FALSE, p=2) 产生:
1 2
1 0.000000
2 3.434144 0.000000
我根本无法弄清楚这是欧几里得距离。如果我计算我认为欧几里得距离应该是什么,它应该是:
((A_{x} - B_{x})^2 + (A_{y} - B_{y})^2 )^0.5 =
((-2.8959969 + 0.2401775)^2 + (-0.3192259 - 0.5801373)^2)^0.5 =
2.803967
这与 dist() 返回的不同。
根据它说的文档
可用的距离度量是(针对两个向量 x 和 y 编写的):
‘euclidean’:两个向量之间的通常距离(2 norm aka L_2), sqrt(sum((x_i - y_i)^2)).
我哪里错了?
【问题讨论】:
-
试试
dist(tmp[-1]) -
dist(tmp[-1])摆脱了我的班级专栏并开始工作。在我上面的例子中,R 是如何处理class的字符的? -
作为因子值,
as.numeric(tmp$class)。 -
这仍然让我觉得有点神秘。如果
A和B被视为因子值,那么它们将是整数,但是如果您查看输出并向后工作,您似乎需要(A-B)^2 = 3.93,这与A,B不一致被转换为整数值。无论发生什么,都不是这样。 -
是的,同意 A,B != 1,2,正如您对因子值所期望的那样。
标签: r euclidean-distance