Не совсем понятно, что вы хотите, но если я вас правильно понимаю - у вас есть строка символов, идентифицирующая метрику, которую вы хотите использовать, и функция с тем же именем.Таким образом, вы должны иметь возможность использовать get
для извлечения функции на основе имени.
metric == "mahalanobis"
metric.fun = get(metric)
distances <- apply(training_set, 1, metric.fun, vec2=curr_vec)
Тем не менее, возможно, существуют более эффективные способы организации кода, позволяющие полностью избежать этой проблемы, например, создатьименованный список функций для доступа к метрикам.
РЕДАКТИРОВАТЬ относительно проблемы inv_cov_mat
, либо передайте ее в качестве аргумента вашей метрической функции, либо используйте get
внутри эта функция для доступа к переменным из родительской среды с использованием аргумента envir
.Передача переменной в качестве аргумента метрической функции, безусловно, является лучшим и более чистым подходом.