liste elemanlarının tüm ikili kombinasyonlar için bir işlev uygulayın. Her bir eleman, aynı uzunluğa sahip olan bir vektördür. Listemden öğelerin sayısı olmak n
, bir n x n
matris formatında çıktısını istiyorum.Listenin elemanlarının tüm ikili kombinasyonlar için bir işlev uygulamak istediğiniz R
Aşağıdaki örneği inceleyelim:
# Generating data
l <- list()
for(i in 1:5) l[[i]] <- sample(0:9, 5, T)
# Function to apply
foo <- function(x, y) 1 - sum(x * y)/sqrt(sum(x^2) * sum(y^2))
# Generating combinations
comb <- expand.grid(x = 1:5, y = 1:5)
Bu döngü eserler ancak yavaş ve çıkış bir matris
# Applying function
out <- list()
for(i in 1:nrow(comb)) {
out[[i]] <- foo(l[[comb[i, 'x']]], l[[comb[i, 'y']]])
}
herhangi bir fikir olarak biçimlendirilmemiş?
sapply(l, function(x) sapply(l, function(y) foo(x,y)))
Ben @A ilgilendi:
'dış (l, l, Vectorize (foo)) ' –
vay! Cevabınız için teşekkürler, çok daha çabuk böylece var;) – goclem