繁体   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