2016-07-05 7 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

 Смежные вопросы

  • Нет связанных вопросов^_^