Se ho un frame di dati come ad esempio:velocità fino calcolare la mediana fila-wise di ogni 3-upla di colonne
df = data.frame(matrix(rnorm(100), 5000, 100))
posso utilizzare la seguente funzione per ottenere ogni combinazione di fila tre termini mediane -wise:
median_df = t(apply(df, 1, combn, 3, median))
Il problema è che questa funzione impiegherà diverse ore per essere eseguita. Il colpevole è mediano(), che richiede circa dieci volte più tempo per essere eseguito rispetto a max() o min().
Come posso accelerare questa funzione, possibilmente scrivendo una versione più veloce di median() o lavorando con i dati originali in modo diverso?
Aggiornamento:
Se faccio funzionare il codice di cui sopra, ma solo per df [, 1: 10] in quanto tale:
median_df = t(apply(df[,1:10], 1, combn, 3, median))
prende 29 secondi
fastMedian_df = t(apply(df[,1:10], 1, combn, 3, fastMedian))
dal pacchetto ccaPP impiega 6,5 secondi
max_df = t(apply(df[,1:10], 1, combn, 3, max))
richiede 2,5 secondi
Quindi vediamo un miglioramento significativo con fastMedian(). Possiamo ancora fare meglio?
Mentre 'median' può rappresentare un po 'di problema rispetto a' max' e 'min', penso che il vero problema con' combn'. Ad esempio, una singola riga ('system.time (combn (df [1,], 3))') impiega circa 10 secondi sulla mia macchina. – nrussell
@nrussell mentre combnPrim è un'implementazione molto più veloce di combn(), in questo caso non posso ottenere combnPrim, restituendo errore: Errore in if (semplificazione) {: argomento non interpretabile come logico –
In ogni caso, combn() richiede meno del 10% del tempo mediano() per eseguire in questa funzione –