Использование списка для выбора функции для выполнения - PullRequest
0 голосов
/ 24 сентября 2019

Я пытаюсь создать список со строками, который в зависимости от значения переменной выполняет разные функции.

Это будет код на этом моменте

### Functions to be executed
execute_spain <- function(){

  print(paste0("execute spanish functions " ))
}
execute_portugal <- function(){

  print(paste0("execute portugal functions" ))
}

Тогда будет основной, где пользователь выберет страну

available_countries <- c("SPAIN","PORTUGAL","CHILE","BRAZIL")
country <- "SPAIN"

if(country %in% available_countries){
  print("available")
  if(country =="SPAIN"){
    ejecutar_spain()
  }else if (country =="PORTUGAL"){
    execute_portuguese_functions()
  }
}else{
  print("Error: country selected does not exist ")
}

Я хотел бы сделать что-тонапример:

available_countries <- c("SPAIN","PORTUGAL","CHILE","BRAZIL")
country <- "SPAIN"
function_to_execute <- c()
function_to_execute["SPAIN"] <- execute_spain()
function_to_execute["PORTUGAL"] <- execute_portugal()

if(country %in% available_countries){
  print("available")
  function_to_execute[country]
}else{
  print("Error: country selected does not exist ")
}

Обязательно ли использовать if со всеми доступными параметрами для выбора функции для выполнения?

1 Ответ

2 голосов
/ 24 сентября 2019

Вы можете использовать именованный вектор

functions <- c(
   SPAIN = function(){print(paste0("execute spanish functions " ))},
   PORTUGAL = function(){print(paste0("execute portugal functions" ))}
)

и использовать его через

functions[["SPAIN"]]()

, чтобы проверить правильность ввода, вы можете использовать

country <- "SPAIN"
hasName(functions, country)

Изменить

Более подробно:

execute_spain <- function(){
  print(paste0("execute spanish functions " ))
}
execute_portugal <- function(){
  print(paste0("execute portugal functions" ))
}

functions <- c(
   SPAIN = execute_spain,
   PORTUGAL = execute_portugal
)

country <- "SPAIN"

if(hasName(functions, country){
  print("available")
  functions[[country]]()
}else{
  print("Error: country selected does not exist ")
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...