使用附加信息查找函数的最大值
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)
让我们考虑以下非常简单的函数:
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)