Anzeige:
Ergebnis 1 bis 3 von 3

Thema: R <- Rekursion: Speichern einer Variablen

  1. #1
    Registrierter Benutzer
    Registriert seit
    28.09.2006
    Ort
    FFM
    Beiträge
    15

    R <- Rekursion: Speichern einer Variablen

    Hallo,
    ich habe mal wieder ein neues R-Problem mitgebracht. Ich habe folgende Funktion geschrieben:

    analyseRecHistSimAgg <- function(treeID, pfID, histSimVecs, eps, refDate) {

    #
    # operates on global data frame histSimVecs
    #

    if (treeID == 1) risktype = 10 else risktype = 24
    treePrefix <- ifelse(treeID == 1, "y", "z")
    childIDs <- aDBTrees$portfolioid[aDBTrees$treeid == treeID & aDBTrees$parentid == pfID]

    for (childID in childIDs) {
    index <- which(aDBTrees$treeid == treeID & aDBTrees$portfolioid == childID)
    if (!aDBTrees$is.leaf[index]) {
    aggDifference <- histSimVecs[[refDate]][[paste(sep="",treePrefix,childID)]]
    difference <- VarVecs$DIFFERENCE[as.Date(VarVecs$BUSINESSDAY)==(as.Date(refDate)-1) & VarVecs$PORTFOLIOID==childID & VarVecs$RISKTYPEID==risktype]
    if (sum((abs(difference - aggDifference)/abs(difference))) > 250 * eps)
    localList <- c(localList , childID)
    analyseRecHistSimAgg(treeID, childID, histSimVecs, eps, refDate)
    }
    }

    return(localList)
    }



    Diese hangelt sich in einer Baumstruktur immer weiter nach unten und geht jeden Pfad ab. Jetzt möchte ich Portfolien suchen, die falsch berechnet wurden, wofür ich die if-Abfrage

    if (sum((abs(difference - aggDifference)/abs(difference))) > 250 * eps)

    habe. Falls diese wahr ist, soll er mir den Portfoiliennamen in einer Liste abspeichern.

    Am Ende möchte ich dann eine Liste mit allen Portfolien, die fehlerhaft berechnet wurden.

    Hier ist aber mein Problem. Da ich dieses Rekursiv berechne und er so die Berechnung des ersten Knotens als letztes beendet, bekomme ich auch immer nur eine Liste mit falsch berechneten Protfolien aus dieser "Ebene"

    Ich hoffe es hat überhaupt jemand verstanden, wo mein Problem liegt
    Und natürlich, dass mir da jemand helfen kann!!!!

    Gruss und Danke,
    DUDE...

  2. #2
    Registrierter Benutzer Avatar von sofa-surfer
    Registriert seit
    23.05.2006
    Beiträge
    2.032
    Hallo,

    hab mich jetzt nicht in dein Problem reingedacht, und vielleicht versteh ich das Problem jetzt auch nicht so ganz. Aber so wie ich das sehe, solltest du doch die Liste mal global initialisieren?

    Code:
    function(){
    
    x<-NULL
    for (i in (1:10)){
    if (i%%2==0)
    x<-c(x,i)
    }
    x
    }
    Oder hast du auf der Ebene eines Knoten mehrere Elemente die du in eine localList schreibst?

    Wie auch immer. Bei solchen Abarbeitungsgeschichten macht sich auch immer das lapply ganz gut .... Da werden die Ergebnisse automatisch in eine Liste geschrieben.

    Matthias

  3. #3
    Registrierter Benutzer
    Registriert seit
    28.09.2006
    Ort
    FFM
    Beiträge
    15
    Hi..

    .. mal wieder vielen Dank!!!!
    Zum einen lag es nämlich genau daran, dass ich die list nicht global initialisiert habe (manchmal sieht man wirklich den Wald vor lauter Bäumen nicht..), zum anderen, da eine zuweisung gefehlt hat..

    der aufruf der rekursion muss richtig nun folgendermaßen aussehen:

    fListe <- analyseRecHistSimAgg(treeID, childID, histSimVecs, eps, refDate, fListe)

    wobei fListe meine globale Liste ist!!!!!!!

    Also... nochmal vielen Dank!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •