【问题标题】:How to speed up for loop in R?如何加快R中的for循环?
【发布时间】:2020-04-25 06:08:58
【问题描述】:
rm(list=ls())
library(gld)
library(GLDEX)

find_likelihood = function(x){
  fit = fit.fkml(x,"ML",return.data=TRUE)
  params = fit$optim.results$par
  dens = dgl(x, c(params), param = "fmkl", inverse.eps = 1e-08, max.iterations = 500)
  dens[dens < 1e-12] = 1e-12
  value = -sum(log(dens))
  return(value)
}

loglik_com = NULL
min_value = NULL

  for(j in 1: 1000){
    x = rgl(100,c(2, 1, 1, 1), param="fkml")
    for (i in 2:(100 - 2)) {
      a = x[1:i]
      b = x[(i + 1):100]
      loglik_com[i] = find_likelihood(a) + find_likelihood(b)
    }
    min_value[j] = min(na.omit(loglik_com))
  }

min_value

在我上面的 R 函数中,我有 1000 次迭代,但需要将近 7 个小时才能得到结果。我的问题是,我可以使用 apply() 函数来加快结果吗?或者我可以使用任何其他方式来加速我的 r 函数?

提前谢谢你。

【问题讨论】:

  • 对 rgl 的调用在循环中做了什么。似乎没有必要在循环内这样做。实际上,整个 for j 循环在您的示例中似乎什么也没做。可能是因为您简化了示例,这很好,但在这种情况下,请在您的问题中提及。
  • @JanvanderLaan,rgl 函数允许在每次迭代中生成随机样本。

标签: r for-loop apply distribution


【解决方案1】:

您可以尝试某种并行化,我看到有 Parallel 包?不过还没有任何亲身经历。 https://www.rdocumentation.org/packages/parallel/versions/3.6.2 https://dept.stat.lsa.umich.edu/~jerrick/courses/stat701/notes/parallel.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-21
    • 1970-01-01
    • 1970-01-01
    • 2012-06-10
    相关资源
    最近更新 更多