Я не уверен, что это то, что вы ищете, но вот что нужно учитывать:
Создайте вектор, содержащий «ТИПЫ», которые вы включаете в свои функции. Затем вы можете динамически построить эти функции и поместить их в именованный список с именем funcList
.
Ваша функция get_line_type
может вызывать все функции и предоставлять line
в качестве аргумента. Результаты можно легко упростить, если вы вернете TRUE
или FALSE
из этих функций.
Я заметил в комментарии, что у вас могут быть два слова с пробелом (например, «поиск товара»). В all_types
вам нужно поставить подчеркивание между этими словами, чтобы создать полезную функцию без пробелов. Кроме того, identified_types
можно изменить, чтобы удалить подчеркивания при необходимости.
all_types <- c("fish", "mouse")
funcList <- lapply(all_types, function(x) eval(parse(text = paste0('is_', x, '_line'))))
names(funcList) <- all_types
get_line_type <- function(line) {
lst <- lapply(funcList, do.call, list(line))
identified_types <- names(lst[unlist(lst)])
if (length(identified_types) > 1) {
stop("Matched multiple types: ", paste(identified_types, collapse = ", "), "\t", "Line: ", line)
}
return(if(length(identified_types) == 1) identified_types[1] else "UNKNOWN")
}