【问题标题】:Can someone explain the underlying methods of R?有人可以解释 R 的基本方法吗?
【发布时间】:2019-06-05 23:02:10
【问题描述】:

我来自 Python 和 C++ 的背景,而 R 似乎使用了我不理解的魔法。我希望有人能给我一些关于它是如何工作的见解。

我的任务是对大约 3,400,000 个数据点的 tibble 中的每一行应用一个算法,并且来自 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

【问题讨论】:

  • 这里发生了很多不同的事情,这意味着问题可能过于广泛。但在基本层面上,如果每个lake_id 在all 中多次出现,您只需在elev 中查找一次,然后将其应用于all 中的每个相关行,即可节省大量时间。跨度>
  • 如果你能以reproducible为榜样,你就能得到更好的答案。

标签: r


【解决方案1】:

R 的魔力在于处理变量时的矢量化 方法。这是much faster,而不是编写执行相同操作的本机循环结构。

向量化有时会使用回收来确保数据结构具有相同的大小,以便更快地执行操作。元素分配(如您的示例中)往往需要变量副本,这会减慢处理速度。

【讨论】:

    猜你喜欢
    • 2011-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-24
    • 1970-01-01
    • 2012-05-29
    • 2010-12-13
    相关资源
    最近更新 更多