機能

2016-07-05 1 views
1

の仮引数からのアクセスの選択肢は、関数の引数の選択肢にアクセスする方法はありますか?機能

noise <- function(animal = c("dog","cat","chicken","pig")){ # default animal is "dog" 
    animal <- match.arg(animal) 
    sound <- c("woof","meow","cluck","oink")[match(animal, c("dog","cat","chicken","pig"))] 
    sound 
} 
noise("chicken") # returns desired result 

私は宣言から選択肢のベクトルにアクセスすることによりc("dog","cat","chicken","pig")を再入力を回避したいと思い、(これを構成する)のようなもの:この愚かな例では

noise <- function(animal = c("dog","cat","chicken","pig")){ 
     animal <- match.arg(animal) 
     sound <- c("woof","meow","cluck","oink")[match(animal, self.choices("animal"))] 
     sound 
    } 

答えて

3

試してみますこの:素晴らしいですeval(formals(noise)[["animal"]])

+0

、ありがとう - それは実行時に評価なっているため、これは可能ですか?そのための関数を定義するとき、 'noise'、まだ定義されていないnoise'関数' ... – C8H10N4O2

+0

私はそれが遅延評価のラッキーな結果だと思う:Rは、最初のスクリプトを解析し、時間によって、それはすでに体、それを評価しています関数のシグネチャを知っている – baptiste

+0

ところで、おそらく関数内でこの情報を取得するための名前にとらわれない方法がありますが、 'sys.frame()'とその兄弟のどれが関係するかは決して思い出せません。 – baptiste