2012-11-16 11 views
14

Iは、以下の単純な密度関数を有する:この関数関数のデフォルト値を設定していますか?

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

は、B及びRパラメータで指定された分布からXの値に相当する密度を返します。私はデフォルト値をxに設定したいと思います。ユーザがxを指定しなければ、デフォルト値が通ります。私たちは単にdpower < - 関数(x = x.default、b、r)を設定することができます...しかし、私のデフォルト値はrとbに依存します。どうやってやるの?仮定xのデフォルト値は次のとおりです。あなたの助けのための

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

おかげで、

+0

「x」がない場合、関数をどのように呼び出すつもりですか? –

+0

こんにちはマシュー、bとrだけです。 xが呼び出されない場合(つまり、dpowerに引数が2つしかない場合)、Rはxのデフォルト値を使用します。 – Sam

+0

これは実行できますが、 'x'引数がリストの最後にある方がずっと簡単です。 –

答えて

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

良い関数が呼び出されたときにx引数が指定されているかどうか、関数にチェックインする必要はありますか? TRUEまたはFALSEを返すもの? – Sam

+3

はい、 'missing(x)'です。これは、関数内の引数( 'x')が呼び出し内で指定されているかどうかをテストします。 – mnel

5

あなたが可能NULLにXの値を設定して、あなたの関数の最初の行のいずれかを持つことができます

if(is.null(x)) 
    x <- seq(from = 0.05, to = b, by = 0.001) 
関連する問題