В следующей статье мы собираемся вычислить расстояние между двумя наборами точек на языке программирования R.
В алгебре каждая точка двумерной плоскости представлена координатами x и y соответственно. Расстояние между любыми двумя точками можно вычислить, используя обе их координатные точки. В R существует большое количество встроенных и внешних пакетов, которые можно использовать для вычисления расстояния между двумя наборами точек. В этой статье мы собираемся использовать функции dist() и crossdist() для вычисления расстояния между двумя наборами точек.
Пример 1: вычисление евклидова расстояния
Библиотека прокси в R используется для расчета близости и ее эффективного вычисления. Пакет можно скачать и установить в рабочее пространство с помощью следующей команды:
install.packages("proxy") library("proxy")
Функцию dist() можно использовать для вычисления расстояния между указанным набором точек. Он возвращает матрицу расстояний указанной матрицы, используя метод, указанный в качестве аргумента.
Syntax: dist(df1, df2, method)
Parameters :
- df1 – The first data frame
- df2 – The second data frame
method — метод, используемый для вычисления расстояния, который может быть «евклидовым», «манхэттенским» или «максимальным» расстоянием.
R
# Importing the required library
library
(proxy)
# creating a data frame
data_frame1 =
data.frame
(x=
c
(2, 4),
y=
c
(3, 1))
data_frame2 =
data.frame
(x=
c
(8, 2),
y=
c
(6, 3))
(
"Distance Matrix "
)
# creating a distance matrix
dist
(data_frame1, data_frame2,
method=
"euclidean"
)
Выход:
[1] "Distance Matrix " > #creating a distance matrix > dist(data_frame1, data_frame2, method = "euclidean") [,1] [,2] [1,] 6.708204 0.000000 [2,] 6.403124 2.828427
В приведенном выше коде сначала мы определили два кадра данных с разными координатами, а затем вычислили расстояние между двумя точками, используя евклидов метод в функции dist().
R
# Defining the point1 with x=2 and y=1
pt1 <-
data.frame
(x = 2,
y = 1)
# Defining the point 2 with x = 4 and y=1
pt2 <-
data.frame
(x = 10,
y = 1)
# Defining euclidean distance between two points
euc.dist <-
function
(x1, x2)
sqrt
(
sum
((x1 - x2) ^ 2))
# Calculating euclidean distance
dist<-
euc.dist
(pt1,pt2)
(
"Euclidean Distance"
)
(dist)
Выход:
[1] "Euclidean Distance" > dist [1] 8
Пример 2: Использование crossdist()
В этом примере мы собираемся определить расстояние между двумя точками с помощью функции crossdist(), доступной в R. Пакет spatstat.geom в R можно установить с помощью следующей команды:
install.packages("spatstat.geom")Функция crossdist() используется для вычисления попарных расстояний между двумя разными наборами точек.
Syntax: crossdist(x1, y1, x2, y2)
Параметры:
-
x1, y1:числовые векторы, указывающие координаты первого набора точек.
-
x2, y2:числовые векторы, указывающие координаты второго набора точек.
Расстояние между двумя точками с указанием их координат рассчитывается по формуле: √((x 2 — x 1 ) 2 + (y 2 — y 1 ) 2 )
R
library
(
"spatstat.geom"
)
# Declaring coordinates of points
# First point
x1 = 2
y1 = 1
# Second point
x2 = 3
y2 = 1
# Printing distance between both points
dist =
crossdist
(x1, y1, x2, y2)
(
"Distance between points"
)
(dist)
Выход:
[1] "Distance between points" [,1] [1,] 1
В приведенном выше коде сначала мы определили две координаты, используя переменные x1, y1, x2 и y2, после чего вычислили расстояние между этими двумя координатами, передав эти переменные в качестве аргументов в функцию crossdist().