У меня есть список фреймов данных с 4 столбцами в каждом и разным количеством строк.Я хочу рассчитать расстояние Хаусдорфа для всех фреймов данных в списке и заполнить матрицу результатов.
library(pracma)
Создание списка
data_frame1<-data.frame("ID"=1:10, "Sum1"= c(4, -2, 16, 20, 13, 4,2,0, 0, -12), "Sum2"=c(-3,-6, 0, 10, 6, 2, 4, -8, 0, 0))
data_frame2<-data.frame("ID"=1:6, "Sum1"= c(13, 4,2,0, 0, -12), "Sum2"=c(10, 6, 2, 4, -8, 0))
data_frame3<-data.frame("ID"=1:5, "Sum1"= c(9,3,5,-6,-1), "Sum2"=c(-2,-4,5, 20,38))
data_frame4<-data.frame("ID"=1:12, "Sum1"= c(3,4, 9,3,5,-5, -6,-1,0,16,11,9), "Sum2"=c(-2,8,8,17, 14,-4,5, 21,30, 10, -15,3))
my_list<- list(data_frame1, data_frame2, data_frame3, data_frame4)
Создание матрицы 4x4 для заполнения ее результатами по расстоянию
hausdist<-matrix(, 4,4)
i<-1:4
Примечание Я хочу рассчитать только расстояние для столбцов 2 и 3
P<-as.matrix(my_list[[i]][c(2,3)])
Q<-as.matrix(my_list[[i+1]][c(2,3)])
### Loop for calculation of hausdorff distance.
for (i in (i+1):3) {
hausdist[[i]]<- print(hausdorff_dist(P,Q))
}
print(hausdist)
[,1] [,2] [,3] [,4]
[1,] NA 13.15295 NA NA
[2,] NA NA NA NA
[3,] 13.15295 NA NA NA
[4,] 13.15295 NA NA NA
#### Correct values:
hausdorff_dist(as.matrix(my_list[[3]][c(2,3)]),as.matrix(my_list[[4]][c(2,3)]))
[1] 13.15295
> hausdorff_dist(as.matrix(my_list[[1]][c(2,3)]),as.matrix(my_list[[2]][c(2,3)]))
[1] 10.44031
При расчете расстояния отдельно результатыправильно, но с циклом у меня одинаковое значение для всех пар фреймов данных.