我不明白dist()函数如何工作来计算两个向量之间的欧氏距离。我创建了最简单的一维向量,我想对我得到的结果进行解释。这是一个名为test.csv的CSV文件向量:
<?php if($skillArray['0']): ?>
<p><?php echo ucwords($skillArray['0']); ?></p>
<?php endif; ?>
<?php if($skillArray['1']): ?>
<p><?php echo ucwords($skillArray['1']); ?></p>
<?php endif; ?>
以下是代码:
Item Name Attribute
Item 1 3
Item 2 5
以下是我得到的输出:
test <- read.csv("test.csv", header = TRUE)
dist(test, method = "euclidean")
R的版本是:Rx64 3.4.3
我希望结果为2而不是2.828427因为我假设欧氏距离是用公式计算的:dist(test, method = "euclidean")
1 2 2.828427
Warning message: In dist(test, method = "euclidean") : NAs introduced by coercion
。
将test.csv文件中的数字替换为我得到的公式:
d = sqrt((xi - yi)^2)
答案 0 :(得分:0)
当您传递矩阵时,它会将您的输入视为n
次m
维向量,请参阅:
dist(t(df[,c("Name","Attribute")])) # distance between the two columns
dist(df[,c("Name","Attribute")]) # distance between the two rows
sqrt((1-3)^2 + (2-5)^2) # distance between the two columns
sqrt((1-2)^2 + (3-5)^2) # distance between the two rows
我认为这可以满足您的需求:
apply(df[,c("Name","Attribute")],1, function(x) {abs(x[1]-x[2])})