Tôi có một đoạn mã và tổng thời gian trôi qua là khoảng 30 giây, mã sau đây là khoảng 27 giây. Tôi đã thu hẹp mã vi phạm này:Tại sao điều này quá chậm? (vòng lặp trong hàng DF so với vectơ độc lập)
d$dis300[i] <- h
Vì vậy, tôi thay đổi thành phần khác này và hiện đang làm việc rất nhanh (như mong đợi).
Câu hỏi của tôi là tại sao điều này quá chậm so với giây. Các DATOS DF là khoảng 7500x18 vars
đầu tiên: (27 giây trôi qua)
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
}
Thứ hai: (0,2 giây trôi qua)
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
Bạn có thể thấy cả hai đều là những "tương tự", nhưng vi phạm một trong những có DF này thay vì một vector duy nhất.
Bất kỳ nhận xét nào thực sự được đánh giá cao. Tôi đến từ một loại ngôn ngữ khác và điều này đã khiến tôi mất nhiều thời gian. Ít nhất tôi có giải pháp nhưng tôi muốn ngăn chặn loại vấn đề này trong tương lai.
Cảm ơn thời gian của bạn,
Chỉ cần làm rõ, sự khác biệt về tốc độ giữa hai là 30 giây so với 27 giây, và bạn xem đây là một tốc độ đáng kể? – joran
Nếu thời gian tương đối của @ joran là chính xác (và khi nào anh ấy sai? :-)), bạn sẽ nhận được rất nhiều tốc độ tốt hơn bằng cách áp dụng những thói quen và kỹ thuật sau: http://stackoverflow.com/questions/2908822/speed -up-the-loop-operation-in-r/8474941 # 8474941 –
@ gsk3 Hàng ngày, theo vợ tôi. – joran