2016-04-14 6 views
0

Ich mag würde wissen, ob es möglich ist, den folgenden Trick vermeiden for Schleifen apply mit smoehow vielleicht zu tun, aber ich weiß nicht, wie mit den max(i-4,1)R - Vermeidung von for-Schleifen basierend auf Matrixindizes

x <- matrix(seq_len(100),10,10) 
x[,1] <- letters[1:10] 
y <- x 
for (i in 1:nrow(x)) { 
    for (j in 2:ncol(x)) { 
    y[i,j] <- x[max(i-4,1),j] 
    } 
} 
in diesem Fall zu tun
+0

Was möchten Sie hier tun? Lag eine Variable? Und wie vermeidet man die 'for'-Schleife? – Jason

+0

Ja, es sollte eine Verzögerung sein, aber auch '0,5 * (x [i, j] + x [max (i-4,1), j]) '. Ich habe versucht, 'apply' zu verwenden, aber ich weiß nicht, wie man es benutzt, wenn es auf einem Matrixindex basiert. – Stefano

Antwort

0

Wenn Sie eine einfache Verzögerungsfunktion möchten, ist dies eine, die für data.tables und Datenrahmen funktioniert. Ich bin sicher, dass Sie bearbeiten können, um mit Matrizen zu arbeiten.

#data table version 
lagging<- 
function (data, var, time) 
{ 
    return(c(rep(NA, time), head(data[, eval(as.name(var))], 
     (length(data[, eval(as.name(var))]) - time)))) 
} 

#data frame version 
lagging<- 
function (data, var, time) 
{ 
    return(c(rep(NA, time), head(data[, var], 
     (length(data[, var]) - time)))) 
} 
+0

Ok, ich versuche zu sehen, wie ich es für meinen Fall anpassen kann. Sie können jedoch bestätigen, dass es keine Möglichkeit gibt, basisbasierte Funktionen zu verwenden. Es war meine Sorge – Stefano

+1

Ich kann weder bestätigen noch ablehnen;) – Jason

Verwandte Themen