#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)