Verweis auf die vorherige Zeile in der Berechnung

8

Ich bin neu in R und kann mich nicht damit befassen, wie ich einen früheren Wert von "self" aufrufen soll, in diesem Fall vorheriges "b" b[-1] .

%Vor%

Offensichtlich brauche ich irgendwo für die erste Berechnung eine NA, aber ich konnte das allein nicht herausfinden.

Hinzufügen eines Beispiels dessen, was das gesuchte Ergebnis sein soll (A = MyData $ High):

%Vor%     
JennyD 06.01.2016, 01:15
quelle

2 Antworten

5

1) for loop Normalerweise würde man dafür einfach eine einfache Schleife verwenden:

%Vor%

geben:

%Vor%

2) Reduzieren Es wäre auch möglich, Reduce zu verwenden. Einer definiert zuerst eine Funktion f , die den Körper der Schleife ausführt, und dann haben wir Reduce wiederholt wie folgt aufgerufen:

%Vor%

gibt das gleiche Ergebnis.

Dies gibt den Anschein, vektorisiert zu sein, aber tatsächlich, wenn Sie die Quelle von Reduce betrachten, macht sie eine for Schleife selbst.

3) filter Da die Form des Problems ein rekursiver Filter mit dem Koeffizienten 13/14 ist, der auf A / 14 arbeitet (aber mit A [1] durch 0 ersetzt), können wir folgendes schreiben . Da filter eine Zeitreihe zurückgibt, verwenden wir c(...) , um sie in einen gewöhnlichen Vektor zurück zu konvertieren. Dieser Ansatz wird tatsächlich vektorisiert, wenn die Filteroperation in C ausgeführt wird.

%Vor%

gibt erneut das gleiche Ergebnis.

Hinweis: Alle Lösungen setzen voraus, dass MyData mindestens eine Zeile hat.

    
G. Grothendieck 06.01.2016, 03:54
quelle
3

Es gibt verschiedene Möglichkeiten, dies zu tun.

Die erste Methode ist eine einfache Schleife

%Vor%

Dies gibt nicht die genauen Werte, die in der erwarteten Antwort angegeben sind, aber es ist nah genug, dass ich angenommen habe, dass Sie einen Transkriptionsfehler gemacht haben. Beachten Sie, dass wir davon ausgehen müssen, dass wir das NA in df$b[1] als null annehmen können oder dass wir NA ganz nach unten bekommen.

Wenn Sie viele Daten haben oder dies einige Zeit benötigen, könnte die Geschwindigkeit verbessert werden, indem Sie den Code in C ++ implementieren und von R aus aufrufen.

Die zweite Methode verwendet die R-Funktion sapply

Das Formular, in dem Sie das Problem in

präsentieren

ist rekursiv, was eine Vektorisierung unmöglich macht, jedoch können wir etwas rechnen und finden, dass es äquivalent zu

ist

Wir können dann eine Funktion schreiben, die b_i berechnet und mit sapply jedes Element berechnet

%Vor%

Hinweis: Wir müssen die erste Zeile löschen (wo A = 5 ), damit die Berechnung korrekt ausgeführt wird.

    
NGaffney 06.01.2016 04:12
quelle

Tags und Links