0

cumsumR の関数を利用する同様のコードが既に実装されています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)
}
4

1 に答える 1

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
}
于 2013-11-03T19:59:30.107 に答える