提高R功能的速度(R循环故障)

时间:2013-11-03 19:47:52

标签: r performance

我已经实现了类似的代码,它利用了R中的cumsum函数。由于some.step.function,我不能在这种情况下使用它。

除了使用编译器包之外,是否有人对重大速度提升有任何建议?谢谢!

genIPCWNumDenom <- function(data, some.step.function){
  #data is a data.frame
  #some.step.function is a function
  n <- d <- array(0, dim = c(nrow(data),1))
  for (i in 1:nrow(data)){
    n.tmp <- d.tmp <- 0
    for (j in i:nrow(data)){
      wt <- some.step.function(data$X[j] + data$err[i])
      n.tmp <- n.tmp + data$Y[j] / wt
      d.tmp <- d.tmp + 1 / wt
    }
    n[i] <- n.tmp  
    d[i] <- d.tmp
  }
  data$N.wt <- n
  data$D.wt <- d
  data
}

编辑:感谢您的帮助到目前为止。删除内部循环使代码可运行。我希望进一步提高速度。这是我目前的循环:

for (i in 1:nrow(data)){
    err.i <- data$err[i]
    wt <- some.step.func(data$X[i:nrow(data)] + err.i)
    n[i] <- sum(data$Y[i:nrow(data)] / wt)
    d[i] <- sum(1 / wt)
}

1 个答案:

答案 0 :(得分:0)

您可以评估外部循环中的data$err[i]

for (i in 1:nrow(data)){
    n.tmp <- d.tmp <- 0
    datai <- data$err[i]
    for (j in i:nrow(data)){
      wt <- some.step.function(data$X[j] + datai)
      n.tmp <- n.tmp + data$Y[j] / wt
      d.tmp <- d.tmp + 1 / wt
    }
    n[i] <- n.tmp  
    d[i] <- d.tmp
}