我已经实现了类似的代码,它利用了cumsum
R 中的函数。在这种情况下我不能使用它,因为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)
}