Max R.
Max R.

Reputation: 11

How to find the minimum in a distance matrix in R? My approach doesn´t work

I want to find the minimum value in my distance matrix in order to programm the single linkage algorithm for cluster analysis with R. But the output doesn´t show the coordinates (row number and column number) to identify the minimum.

I tried the "which" command to solve this.

This seems to be the right approach:

> x <- matrix(c(1, 2, 0, 4), nrow=2, ncol=2)
> which(x == min(x), arr.ind=TRUE)
     row col
[1,]   1   2

I tried it with my case, but there is no right output:

> which(distance.matrix.euc==min(distance.matrix.euc), arr.ind=TRUE)
     row col

I expect that R shows me the coordinates where the minimum value is in the distance matrix, but it shows nothing.

Do you have an idea what´s wrong.

Upvotes: 1

Views: 1356

Answers (1)

Imran Kocabiyik
Imran Kocabiyik

Reputation: 439

If you create the distance.matrix.euc with the dist function in R, then its class will be dist, not a matrix.

set.seed(2)
x <- matrix(sample(1:10, 6, replace = FALSE), nrow=3)
x
#        [,1] [,2]
# [1,]    5    1
# [2,]    6   10
# [3,]    9    7
distance_matrix <- dist(x)
distance_matrix
#          1        2
# 2 9.055385         
# 3 7.211103 4.242641
class(distance_matrix)
# [1] "dist"

As @akrun suggested, you can convert your distance matrix into matrix class. Then, the which command should return closest points.

min_dist <- min(distance_matrix)
distance_matrix <- as.matrix(distance_matrix)
which(distance_matrix==min_dist, arr.ind=TRUE)
#     row col
# 3   3   2
# 2   2   3

Upvotes: 1

Related Questions