避免R中的循环

时间:2014-03-17 11:09:34

标签: r loops optimization for-loop

我试图避免R中的循环但是我遇到了困难。目前这是我的代码,但我真的想知道是否有直接的方法(没有循环)。三角形只是一个IxJ矩阵

I = 10
J = 10
xi <- rep(0,J) 
xi[1] <- 1
for(j  in 2:J){
  xi[j]<-(1/(I-j+1))*sum(log(Triangle[1:(I-j+1),j]/Triangle[1:(I-j+1),j-1]))
}

1 个答案:

答案 0 :(得分:2)

这是一个矢量化解决方案。但是,这似乎并没有提高效率。

mat <- matrix(NA, nrow=I, ncol=J)
smat1 <- cbind(FALSE, rbind(lower.tri(matrix(nrow=I-1, ncol=J-1), diag=TRUE)[(I-1):1,], FALSE))
smat2 <- lower.tri(matrix(nrow=I, ncol=J))[I:1,]
mat[smat1] <- Triangle[smat1] / Triangle[smat2]
res <- c(1, colMeans(log(mat), na.rm=TRUE)[-1])