簡體   English   中英

有人可以解釋 R 的底層方法嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM