2つのパラメーター(_p1
_と_p2
_)を取る関数f
があります。
パラメータ_p2
_の値が関数に渡されなかった場合は、代わりに_p1
_ ^ 2の値を使用する必要があります。しかし、値が指定されているかどうかにかかわらず、関数内でどのように確認できますか?問題は、値がない場合、変数_p2
_が初期化されないことです。したがって、_p2
_がNULL
であることをテストすることはできません。
_f <- function(p1, p2) {
if(is.null(p2)) {
p2=p1^2
}
p1-p2
}
_
_p2
_の値が関数に渡されたかどうかを確認することはどういうわけか可能ですか? (isset()
-関数または同様のものを見つけることができませんでした。)
そのために関数missing()
を使用します。
_f <- function(p1, p2) {
if(missing(p2)) {
p2=p1^2
}
p1-p2
}
_
または、デフォルトでp2の値をNULLに設定できます。ネストされた関数に引数を渡すことができるので、私は時々その解決策を好みます。
_f <- function(p1, p2=NULL) {
if(is.null(p2)) {
p2=p1^2
}
p1-p2
}
f.wrapper <-function(p1,p2=NULL){
p1 <- 2*p1
f(p1,p2)
}
> f.wrapper(1)
[1] -2
> f.wrapper(1,3)
[1] -1
_
編集:missing()
でも技術的にこれを行うことができますが、_f.wrapper
_にもmissing()
ステートメントを含める必要があります。
「?missing」はそれをすべきだと思います。
このような場合、次のようなものを使用することもできます。
f <- function(p1, p2 = p1 ^ 2) {
p1-p2
}
http://adv-r.had.co.nz/Functions.html の遅延評価に関する部分を参照してください