Ho un pezzo di codice e il tempo totale trascorso è di circa 30 secondi, il codice seguente è di circa 27 secondi. Ho ridotto il codice incriminato per questo:Perché è così lento? (loop in una riga DF rispetto a un vettore standalone)
d$dis300[i] <- h
Così posso cambiare a questo altro pezzo e sta attualmente lavorando veramente veloce (come previsto).
La mia domanda è perché questo è troppo lento rispetto al secondo. Il datos DF è di circa 7500x18 vars
Primo: (27 sec trascorsi)
d$dis300 <- 0
for (i in 1:netot) {
h <- aaa[d$ent[i], d$dis[i]]
if (h == 0) writeLines(sprintf("ERROR. ent:%i dis:%i", d$ent[i], d$dis[i]))
d$dis300[i] <- h
}
Secondo: (0,2 sec trascorso)
d$dis300 <- 0
for (i in 1:netot) {
h <- aaa[d$ent[i], d$dis[i]]
if (h == 0) writeLines(sprintf("ERROR. ent:%i dis:%i", d$ent[i], d$dis[i]))
foo[i] <- h
}
d$foo <- foo
è possibile vedere entrambi sono la "stessa", ma la offendendo uno ha questo DF invece di un singolo vettore.
Qualsiasi commento è molto apprezzato. Sono venuto da un altro tipo di lingue e questo mi ha fatto impazzire per un po '. Almeno ho una soluzione, ma mi piace prevenire questo tipo di problemi in futuro.
Grazie per il vostro tempo,
Giusto per chiarire, la differenza di velocità tra i due è di 30 secondi contro 27 secondi, e si considera una drammatica accelerazione? – joran
Se i tempi relativi di @ joran sono corretti (e quando si sbagliano? :-)), otterrete dei miglioramenti molto migliori adottando queste abitudini e tecniche: http://stackoverflow.com/questions/2908822/speed -up-the-loop-operation-in-r/8474941 # 8474941 –
@ gsk3 Daily, secondo mia moglie. – joran