使用附加信息查找函数的最大值

Finding maximum of function with additional information

让我们考虑以下非常简单的函数:

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() 和 return 列表中所有可能的字符串和对象 :

(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) 应该 return 列出对象 :

(1) 'string_some'(这是达到最大值的字符串)

(2) 9(最大值)

这个怎么样:

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)