Bir kod parçam var ve toplam geçen süre yaklaşık 30 saniyedir, aşağıdaki kod 27 saniyedir.Bu neden bu kadar yavaş? (bir DF satırında tek başına bir vektörle döngü)
d$dis300[i] <- h
yüzden bu diğer parçasına değiştirmek ve şimdi gerçekten hızlı (beklendiği gibi) çalışıyor: Ben buna teşkil eden kodu daralmış.
Sorum şu ki, bu neden ikinciye karşı çok yavaş. DF 7500x18 etrafında datos
İlk vars: (27 sn geçen)
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
}
İkincisi: (0.2 sn geçen)
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
Sen hem "aynı" ama görebilirsiniz Birinin kırılması tek bir vektör yerine bu DF'ye sahip.
Herhangi bir yorum gerçekten takdir edilmektedir. Başka bir dil türünden geldim ve bu bir süreliğine beni deli ediyordu. En azından bir çözümüm var ama gelecekte bu tür sorunları önlemeyi seviyorum.
Zaman ayırdığınız için teşekkürler,
Sadece açıklamak gerekirse, ikisi arasındaki hız farkı 30sec vs 27sec, ve bunun çarpıcı bir hız olduğunu düşünüyor musunuz? – joran
@ Joran göreceli zamanlamaları doğru (ve ne zaman o yanlış olduğunu :-)?), Bu alışkanlıkları ve teknikleri benimseyerek çok daha iyi hız-up döneriz: http://stackoverflow.com/questions/2908822/speed -up-the-döngü-işlem-in-r/8474941 # 8474941 –
@ gsk3 Günlük, karıma göre. – joran