Предположим, что у меня есть функция R, в которой аргументы могут быть одним из нескольких предопределенных именованных значений (один из которых является значением по умолчанию) или пользовательский вектор символов. Как это реализовать, не полагаясь на имена магических значений или другой флаг?Параметры аргументов по умолчанию и именованные значения
#allow use of predefined subsets or pass their own list
bratPack<-function(members='CORE',...){
if (members=='CORE')
members<-c('Emilio Estevez','Anthony Michael Hall','Rob Lowe','Andrew McCarthy','Demi Moore','Judd Nelson','Molly Ringwald','Ally Sheedy')
else if (members=='ALL')
members<-c('Emilio Estevez','Anthony Michael Hall','Rob Lowe','Andrew McCarthy','Demi Moore','Judd Nelson','Molly Ringwald','Ally Sheedy','James Spader','Robert Downey, Jr.','Jon Cryer', 'John Cusack', 'Kevin Bacon', 'Jami Gertz', 'Mary Stuart Masterson', 'Matthew Broderick', 'Sean Penn', 'Kiefer Sutherland')
...
}
Написав это, я не уверен, хотите ли вы что-то для опций '' CORE '' или '' ALL ''или хотите ли вы где-то сохранить два вектора имен. Мой ответ затрагивает первое, о чем я думал при чтении названия вашего Q. –
Мне нужно, чтобы он принял foo («3rdRate»). В основном мне интересно, что такое соглашение для реализации этих типов предопределенных подмножеств. –
@Gavin Вам не нужно делать 'members <- 'CORE'': если вы установите' multiple.ok = T' в 'match.arg()'. Он будет соответствовать только первому. Или просто 'match.arg (« CORE »)' без указания опций делает то же самое. Я решил не указывать все опции в функции, так как адаптация теперь требует только адаптации константы dataframe в пакете. В противном случае вам придется адаптировать как фрейм данных, так и функцию, если вы хотите добавить новую категорию. Я думаю, вопрос дизайна. Плюс, используя конструкцию try, можно специфицировать вектор как запрошенный OP. –