2012-11-16 7 views
14

Ich habe eine einfache Dichtefunktion unter:Den Standardwert in einer Funktion einstellen?

dpower <- function(x, b, r){ 
if ((b <= 0 | r <= 0)) 
return("Wrong parameters entered!") 
else{ 
density.temp <- (r/b)*(x/b)^(r - 1) 
density.temp[which(x >= b | x <= 0)] <- NA 
return(density.temp) 
} 
} 

Diese Funktion gibt Dichte Wert x von der vorgegebenen Verteilung mit den Parametern B und R entspricht. Ich möchte den Standardwert für x festlegen, dass, wenn der Benutzer kein x angibt, die Standardwerte durchlaufen werden. Wir können einfach dpower setzen < - Funktion (x = x.default, b, r) ... aber mein Standardwert ist abhängig von r und b. Wie kann ich das machen? nehme an, der Standardwert für x ist:

seq(from = 0.05, to = b, by = 0.001) 

Danke für Ihre Hilfe,

+0

Wie wollen Sie die Funktion aufrufen, wenn 'x' fehlt? –

+0

Hallo Matthew, mit nur b und r. Ich möchte, dass R weiß, dass, wenn x nicht aufgerufen wird (d. H. Dpower hat nur zwei Argumente), R den Standardwert von x verwendet. – Sam

+0

Es kann getan werden, aber es ist viel einfacher, wenn das Argument 'X' in der Liste zuletzt ist. –

Antwort

21
dpower <- function(b, r, x = seq(from = 0.05, to = b, by = 0.001)) 
.... 
+2

Gut. Gibt es trotzdem einen Check in der Funktion, ob das x-Argument beim Aufruf der Funktion angegeben wurde? etwas, das TRUE oder FALSE zurückgibt? – Sam

+3

Ja, 'fehlt (x)'. Dies wird testen, ob ein Argument ("x") innerhalb einer Funktion innerhalb des Aufrufs spezifiziert wurde. – mnel

5

Sie den Wert von X zu NULL und einer der ersten Zeilen Ihrer Funktion

sein einstellen
if(is.null(x)) 
    x <- seq(from = 0.05, to = b, by = 0.001)