2012-11-16 3 views
14

Ho una semplice funzione di densità di seguito:Impostazione del valore predefinito in una funzione?

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) 
} 
} 

Questa densità restituisce la funzione corrispondente al valore x dalla distribuzione specificata con parametri b e r. Mi piacerebbe impostare il valore predefinito su x che se l'utente non specifica x, i valori predefiniti passano attraverso. Possiamo semplicemente impostare dpower < - function (x = x.default, b, r) ... tuttavia, il mio valore predefinito dipende da r eb. Come lo posso fare? supponiamo che il valore predefinito per x è:

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

Grazie per il vostro aiuto,

+0

Come intendete chiamare la funzione, nel caso in cui manchi 'x'? –

+0

Ciao Matthew, con solo b er. Voglio che R sappia che se x non viene chiamato (cioè dpower ha solo due argomenti), allora R usa il valore predefinito di x. – Sam

+0

Può essere fatto, ma è molto più semplice se l'argomento 'x' è l'ultimo nella lista. –

risposta

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

Buono. È comunque necessario verificare nella funzione se l'argomento x è stato specificato quando viene chiamata la funzione? qualcosa che restituisce VERO o FALSO? – Sam

+3

Sì, 'mancante (x)'. Questo testerà se un argomento ('x') all'interno di una funzione è stato specificato all'interno della chiamata. – mnel

5

È possibile impostare il valore di X per NULL e hanno una delle prime linee di vostra funzione sia

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