Используя основание r:
Поскольку мы берем абсолюты, то результаты всегда будут симметричной матрицей:
first (1) получим среднее абсолютных разностей столбцов, (2) получить комбинации, (3) создать матрицу измерений: ncol (df) * ncol (df) и (4) заполнить результаты:
a=combn(df,2,function(x)mean(abs(do.call("-",x))))#1
b= t(combn(ncol(df),2)) #(2)
d = matrix(0,ncol(df),ncol(df))#(3)
d[b]=a
d+t(d)
[,1] [,2] [,3]
[1,] 0 1 2
[2,] 1 0 1
[3,] 2 1 0
вы можете написать длиннуюкод линии:
replace(matrix(0,ncol(df),ncol(df)),rbind(i<-t(combn(ncol(df),2)),i[,2:1]),rep(combn(df,2,function(x)mean(abs(do.call("-",x)))),2))
[,1] [,2] [,3]
[1,] 0 1 2
[2,] 1 0 1
[3,] 2 1 0