我已经实现了类似的代码,它利用了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)
}
答案 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
}