Desidero applicare una funzione a tutte le combinazioni a coppie di elementi di elenco. Ogni elemento è un vettore con la stessa lunghezza. Vorrei che l'output in un formato di matrice n x n
, n
fosse il numero di elementi nel mio elenco.Applicare una funzione a tutte le combinazioni a coppie degli elementi di elenco in R
consideri il seguente esempio:
# 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)
questo ciclo funziona ma è lento e l'uscita non è formattata come matrice
# Applying function
out <- list()
for(i in 1:nrow(comb)) {
out[[i]] <- foo(l[[comb[i, 'x']]], l[[comb[i, 'y']]])
}
Qualche idea?
'outer (l, l, Vectorize (foo))' –
Wow! Grazie per la tua risposta, è molto più veloce;) – goclem