man kann bei Nutzung dieser Funktionen die Eigenschaft, dass die Ergebnismatrix symmetrisch ist, schlecht in die Berechnung einfließen lassen.
Deshalb habe ich mich diesmal für die klassische doppelte for-Schleife entschieden.
Code: Alles auswählen
set.seed(42)
Dat <- data.frame(StreckenID = 1:400, Laenge = runif(400, 1,1000), MaxSteigung = 10*rbeta(400,1,8),
Hoehenmeter = abs(rnorm(400,100,20)), AnteilSchotterwege = rbeta(400, 4,4))
euc.dist <- function(x1, x2) sqrt(sum((x1 - x2)^2))
X <- as.matrix(Dat[-1])
n <- nrow(Dat)
myDistMat <- matrix(0, n, n)
for (i in 1:(n-1)) for (j in (i+1):n) {
myDistMat[i,j] <- euc.dist(X[i,], X[j,])
myDistMat[j,i] <- myDistMat[i,j]
}
D2 <- sapply(1:n, function(i) sapply(1:n, function(j) euc.dist(X[i,], X[j,])))
identical(myDistMat, D2)
D3 <- apply(X, 1, function(x1) sapply(1:n, function(j) euc.dist(x1, X[j,])))
identical(myDistMat, D3)
D4 <- apply(X, 1, function(x2) apply(X, 1, euc.dist, x2=x2))
identical(myDistMat, D4)
Gruß, Jörg