[英]Can someone explain the underlying methods of R?
我來自 Python 和 C++ 的背景,而 R 似乎使用了我不理解的魔法。 我希望有人能夠讓我深入了解它是如何工作的。
我的任務是對大約 3,400,000 個數據點的每行應用算法,並且來自 C++,我想遍歷表並手動計算它並將其輸入到 tibble 中:
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 個數據點都是正確的。 我能想到的唯一方法是通過迭代,所以我不知道那一小行代碼是如何完成得如此之快的。 有人可以向我解釋這些小東西的魔力嗎?
R 的魔法是處理變量時的矢量化方法。 它比編寫執行相同操作的本機循環結構要快得多。
矢量化有時使用回收來確保數據結構具有相同的大小,以便更快地執行操作。 元素分配(如您的示例中)往往需要變量的副本,這會減慢處理速度。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.