Поиск максимума функции с дополнительной информацией

#r #string #max

#r #строка #макс

Вопрос:

Давайте рассмотрим очень простую функцию, следующую :

 easy_function=function(vec,string){
  if (string=='some_string') sum(vec)
  else if (string=='string_some') 3*max(vec)
  else if (string=='some_string_some') mean(sum(vec),max(vec))
}
  

что я хочу сделать, так это создать другую функцию find_biggest<-function(vec) , которая просматривает все возможные строки easy_function() и возвращает список с объектами :

(1) строка, для которой достигнут максимум

(2) значение максимума.

В моей работе до сих пор очень легко получить вторую точку. Точно так же, как следующее :

 find_biggest<-function(vec){
  max(easy_function(vec,'some_string'),easy_function(vec,'string_some'),
      easy_function(vec,'some_string_some'))
}
  

Однако я понятия не имею, как я могу получить, для какой строки был достигнут максимум. Не могли бы вы помочь мне получить это?

Например find_biggest(1:3) , должен возвращать список с объектами :

(1) ‘string_some’ (это строка, для которой достигнут максимум)

(2) 9 (это максимум)

Комментарии:

1. Было бы полезно, если бы вы могли предоставить короткий пример с вводом и желаемым выходом.

2. Привет, спасибо за ваш комментарий. Я просто обновляю свой вопрос ;))

Ответ №1:

Как насчет этого:

 library(tidyverse)

easy_function=function(vec,string){
  if (string=='some_string') sum(vec)
  else if (string=='string_some') 3*max(vec)
  else if (string=='some_string_some') mean(sum(vec),max(vec))
}

find_biggest <- function(vec){
  strings <- c("some_string", "string_some", "some_string_some")
  
  all_vals <- strings %>% map(easy_function, vec = vec) %>% unlist
  
  list(max_string = strings[which.max(all_vals)],
       max_val = max(all_vals))
}

find_biggest(1:10)