Я пришел из Python и C ++, и R, кажется, использует магию, которую я не понимаю. Я надеялся, что кто-нибудь сможет дать мне некоторое представление о том, как это работает.
Мне было поручено применить алгоритм к каждой строке в таблице из 3400000 точек данных, и, исходя из C ++, я подумал перебрать таблицу, вычислить ее вручную и ввести в таблицу как таковой:
add_elev <- function(all, elev){
row <- 1
while(row < nrow(all)){
adder <- filter(elev, lake_id == all[row, "lake_id"][[1]])
curr_id <- all[row, "lake_id"][[1]]
while(all[row, "lake_id"][[1]] == curr_id){
all[row, "elevation"] <- adder[1, "elevation"][[1]]
row <- row + 1
if (row > nrow(all)){
break
}
if (all[row, "lake_id"][[1]] != curr_id){
break
}
}
if (row > nrow(all)){
break
}
}
return(all)
}
Функция работает, но, по оценкам, она занимает около 9 часов. Посмотрев в некоторых справочниках, я обнаружил, что могу сделать то же самое, просто используя "all <- left_join (all, elevation, by =" lake_id ")". Это закончилось менее чем за секунду, и, по-видимому, все 3 400 000 точек данных были правильными. Единственный способ, которым я мог думать об этом, был через итерацию, поэтому я понятия не имею, как эта маленькая строка кода закончилась так быстро.
Может ли кто-нибудь объяснить мне магию этих плиток? </p>