Digamos que tengo una función R en la que los argumentos pueden ser uno de los pocos valores con nombre predefinidos (uno de los cuales es el predeterminado) o un vector de caracteres personalizado. ¿Cómo debo implementar esto sin confiar en los nombres de valores mágicos u otra bandera?Función de argumentos predeterminados y valores con nombre
#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')
...
}
Habiendo escrito esto, no estoy seguro de si desea algo para las opciones '" CORE "' o '" ALL "' o si desea almacenar los dos vectores de nombres en alguna parte. Mi respuesta se dirige a la primera, que es lo que pensé al leer el título de tu Q. –
. Necesito que acepte foo ("3rdRate"). Básicamente, me pregunto cuál es la convención para implementar estos tipos de subconjuntos predefinidos. –
@Gavin No tiene que hacer 'members <- 'CORE'': si establece' several.ok = T' en 'match.arg()'. Simplemente coincidirá con el primero. O simplemente 'match.arg (" CORE ")' sin especificar las opciones hace lo mismo. Opté por no especificar todas las opciones en la función, ya que la adaptación ahora solo requiere la adaptación de la constante del marco de datos dentro del paquete. De lo contrario, deberá adaptar tanto el marco de datos como la función si desea agregar una nueva categoría. Una cuestión de diseño, supongo. Además, el uso de la construcción try permite la especificación de un vector como OP preguntó. –