If in R nur eines wird ausgeführt

Hey Leute, vielleicht kann mir jemand auf die Sprünge helfen.
und zwar geht es ums programmieren in R.

Es funktioniert alles bei der Abfrage, solange ich nur eine If structur habe.

Sonst funktioniert bei der Abfrage immer nur die unterste Methode(in meinem Beispiel "t")..wenn ich ich die Reihenfolge tausche funktioniert wieder nur das nächste usw..


Code:
## Eingabe zum Testen: 
## VaR(w = 1000, S = c(10,12,23),method = "analytisch", prozent = "99")


VaR <- function(w ,S ,method, prozent) {
        Y <- log(S[-1]/S[1:(length(S)-1)])
        mu <- mean(Y)
        sigma <- sd(Y)
        sigma 
       
        if(method == "analytisch") {
                        if(prozent == "99"){
                                VaR_01 <- - w * (exp(mu + sigma * qnorm(0.01)) -1)
                                VaR_01  
                                 }   else {
                                              VaR_05 <- - w * (exp(mu + sigma * qnorm(0.05)) -1)
                                              VaR_05 
                                           }  
                                         }
         if(method == "RM") {
                        if(prozent == "99"){
                                  VaR_RM_01 <- - w * sigma * qnorm(0.01)
                                  VaR_RM_01
                        }else {
                                VaR_RM_05 <- - w * sigma * qnorm(0.05)
                                VaR_RM_05
                        }            
       }
        
        if(method == "t") {
                        if(prozent == "99"){
                                VaR_t_01 <- - w * (exp(mu + sigma * qt(0.01, df = 7)) -1)
                                VaR_t_01
                        } else {
                                VaR_t_05 <- - w * (exp(mu + sigma * qt(0.0, df = 7)) -1)
                                VaR_t_05
                        }       
        }
}

Lg und Danke im vorhinein
 
Hi,

Getestet habe ich folgendes:
Code:
## Eingabe zum Testen:
## VaR(w = 1000, S = c(10,12,23),method = "analytisch", prozent = "99")


VaR <- function(w ,S ,method, prozent) {
  Y <- log(S[-1]/S[1:(length(S)-1)])
  mu <- mean(Y)
  sigma <- sd(Y)
  sigma

  if(method == "analytisch") {
    print(1)
    if(prozent == "99"){
      VaR_01 <- - w * (exp(mu + sigma * qnorm(0.01)) -1)
      VaR_01 
    } else {
        VaR_05 <- - w * (exp(mu + sigma * qnorm(0.05)) -1)
        VaR_05
    } 
  }
  if(method == "RM") {
    print(2)
    if(prozent == "99"){
      VaR_RM_01 <- - w * sigma * qnorm(0.01)
      VaR_RM_01
    }else {
      VaR_RM_05 <- - w * sigma * qnorm(0.05)
      VaR_RM_05
    }           
  }

  if(method == "t") {
    print(3)
    if(prozent == "99"){
      VaR_t_01 <- - w * (exp(mu + sigma * qt(0.01, df = 7)) -1)
      VaR_t_01
    } else {
      VaR_t_05 <- - w * (exp(mu + sigma * qt(0.0, df = 7)) -1)
      VaR_t_05
    }      
  }
}

VaR(w = 1000, S = c(10,12,23),method = "analytisch", prozent = "99")
VaR(w = 1000, S = c(10,12,23),method = "RM", prozent = "99")
VaR(w = 1000, S = c(10,12,23),method = "t", prozent = "99")

Execute R Script Online

Ausgabe:
Code:
[1] 1
[1] 2
[1] 3
[1] 437.9752
-> Funktioniert doch? Oder unterlaeuft mir gerade ein gravierender Fehler? Bin in R nicht so bewandert.

- ChiefWiggum
 
Hey..danke erstmal.

Wie du siehst wird leider nur der Wert von :
VaR(w = 1000, S = c(10,12,23),method = "t", prozent = "99")
ausgegeben.

Tauschen wir die Reihenfolge der "If´s" und wird die methode "RM" unter "t" stehen, wird nun nur RM ausgegeben.

Also der Benutzer soll entscheiden können, ob er für "t", "RM" oder "analytisch" seine Ausgabe haben will. Hoffe das ist halbwegs klar verständlich ausgedrückt.

Die einzelnen "If´s" funktionieren soweit, nur wenn ich mehrere habe, ignoriert er sie einfach. Wahrscheinlich habe ich einen Fehler in der Syntax.

Lg
 
Achso, ich denke, du hast einfach die Return-Anweisung vergessen.
Code:
## Eingabe zum Testen:
## VaR(w = 1000, S = c(10,12,23),method = "analytisch", prozent = "99")


VaR <- function(w ,S ,method, prozent) {
  Y <- log(S[-1]/S[1:(length(S)-1)])
  mu <- mean(Y)
  sigma <- sd(Y)
  sigma

  if(method == "analytisch") {
    if(prozent == "99"){
      VaR_01 <- - w * (exp(mu + sigma * qnorm(0.01)) -1)
      return(VaR_01)
    } else {
        VaR_05 <- - w * (exp(mu + sigma * qnorm(0.05)) -1)
        return(VaR_05)
    } 
  }
  if(method == "RM") {
    if(prozent == "99"){
      VaR_RM_01 <- - w * sigma * qnorm(0.01)
      return(VaR_RM_01)
    }else {
      VaR_RM_05 <- - w * sigma * qnorm(0.05)
      return(VaR_RM_05)
    }           
  }

  if(method == "t") {
    if(prozent == "99"){
      VaR_t_01 <- - w * (exp(mu + sigma * qt(0.01, df = 7)) -1)
      return(VaR_t_01)
    } else {
      VaR_t_05 <- - w * (exp(mu + sigma * qt(0.0, df = 7)) -1)
      return(VaR_t_05)
    }      
  }
}

print(VaR(w = 1000, S = c(10,12,23),method = "analytisch", prozent = "99"))
print(VaR(w = 1000, S = c(10,12,23),method = "RM", prozent = "99"))
print(VaR(w = 1000, S = c(10,12,23),method = "t", prozent = "99"))

Ausgabe:
Code:
[1] 298.0071
[1] 770.2865
[1] 437.9752

Was soll eigentlich die Zeile machen, wo nur "sigma" drin steht? Ist die nicht ueberfluessig?
Und wieso speicherst du die prozent-Variable als String?
 
Zuletzt bearbeitet:
Ich danke dir, es funktioniert! Ich dachte es reicht den Namen einfach hinzuschreiben, und er gibt das Ergebnis aus.

Ja, das sigma war überflüssig :)
Also, das sagt mir jetzt nicht viel mit dem String.
Man kann das alles sicher viel schöner schreiben, bin aber gerade froh, dass es so funktioniert und werde mich jetzt noch damit beschäftigen.

Lg
 
Also, das sagt mir jetzt nicht viel mit dem String.
Prozent ist doch bestimmt eine Zahl? Wieso speicherst du sie dann nicht als Zahl anstatt als Text?

Also statt
Code:
 if(prozent == "99")
ein
Code:
if(prozent == 99)
und statt
Code:
VaR(w = 1000, S = c(10,12,23),method = "analytisch", prozent = "99")
ein
Code:
VaR(w = 1000, S = c(10,12,23),method = "analytisch", prozent = 99)
 
Zurück
Oben