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]
.
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%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:
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.
gibt erneut das gleiche Ergebnis.
Hinweis: Alle Lösungen setzen voraus, dass MyData
mindestens eine Zeile hat.
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äsentierenist rekursiv, was eine Vektorisierung unmöglich macht, jedoch können wir etwas rechnen und finden, dass es äquivalent zu
istWir 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.
Tags und Links r