Вызов переменных внутри функций в R

#r #shiny

Вопрос:

У меня есть функция, как показано ниже

 
fun1 <- function(){
  list(
    EXP ='selectInput',HOW  ='selectInput',
    WHAT = 'selectInput',WHERE = 'selectInput'
  )
}
 

Это повторяется много раз в моем коде, поэтому я планирую объявить переменные здесь

 e <- "EXP"
a <- "HOW"
b <- "WHAT"
c <- "WHERE"

 

Ожидаемый результат

 
fun1 <- function(){
  list(
    e ='selectInput',a  ='selectInput',
    b = 'selectInput',c = 'selectInput'
  )
}

fun1()
$EXP
[1] "selectInput"

$HOW
[1] "selectInput"

$WHAT
[1] "selectInput"

$WHERE
[1] "selectInput"
 

Но результат, который я получаю, таков

 > fun1 <- function(){
   list(
     e ='selectInput',a  ='selectInput',
     b = 'selectInput',c = 'selectInput'
   )
 }
> fun1()
$e
[1] "selectInput"

$a
[1] "selectInput"

$b
[1] "selectInput"

$c
[1] "selectInput"
 

Итак, можем ли мы вызывать переменные внутри функций

Ответ №1:

список принимает имя параметра буквально, это не похоже на диктат Python, где любое хэшируемое значение может быть ключом, они индексируются на 1 или называются*.

Вы можете сделать что-то вроде

 fun1 <- function() {
  setNames(
    list("selectInput", "selectInput", "selectInput", "selectInput"), 
    c(e, a, b, c)
  )
}
 

* Вы можете использовать числа, избегая их с помощью обратных ходов, но это превращает их в character «потому names character что есть».