Hilfe beim Beschleunigen einer Schleife in R

rundsätzlich möchte ich eine diagonale Mittelwertbildung in R durchführen. Nachfolgend finden Sie einen Code, der aus dem simsalabim-Paket für die diagonale Mittelwertbildung angepasst wurde. Nur das ist langsam.

Haben Sie Vorschläge, dies zu vektorisieren, anstatt sapply zu verwenden?

reconSSA <- function(S,v,group=1){
### S : matrix
### v : vector

    N <- length(v)
    L <- nrow(S)
    K <- N-L+1
    XX <- matrix(0,nrow=L,ncol=K)
    IND <- row(XX)+col(XX)-1
    XX <- matrix(v[row(XX)+col(XX)-1],nrow=L,ncol=K)
    XX <- S[,group] %*% t(t(XX) %*% S[,group])

    ##Diagonal Averaging
    .intFun <- function(i,x,ind) mean(x[ind==i])

    RC <- sapply(1:N,.intFun,x=XX,ind=IND)
    return(RC)
}

Für Daten können Sie das folgende @ verwend

data(AirPassengers)
v <- AirPassengers
L <- 30
T <- length(v)
K <- T-L+1

x.b <- matrix(nrow=L,ncol=K)
x.b <- matrix(v[row(x.b)+col(x.b)-1],nrow=L,ncol=K)
S <- eigen(x.b %*% t(x.b))[["vectors"]] 
out <- reconSSA(S, v, 1:10)

Antworten auf die Frage(4)

Ihre Antwort auf die Frage