В блестящей функции ввода я могу установить начальное значение как отсутствующее, а не как NULL? - PullRequest
0 голосов
/ 04 марта 2019

Я создаю блестящее приложение, которое взаимодействует с библиотекой, которую я создал.Функции в этой библиотеке имеют множество необязательных аргументов.Функции написаны так, что они могут легко обрабатывать случаи, когда missing(argument) == TRUE.

Функции ввода Shiny позволяют установить значение по умолчанию для ввода, если пользователь не указывает его самостоятельно. Можно ли установить значение по умолчанию, которое отсутствует (т. Е. Не существует)?

Например, это способ установки значения по умолчанию NULL, но это не такто, что я хочу.

textInput("argument", label = "Set this optional argument",
          value = NULL)

РЕДАКТИРОВАТЬ: По всей вероятности, я должен просто изменить свои функции, чтобы иметь значение по умолчанию NULL, вместо того, чтобы использовать функцию missing избаза для установки значений по умолчанию.Тем не менее, мне все еще интересно, можно ли установить значение по умолчанию как несуществующее.

1 Ответ

0 голосов
/ 05 марта 2019

Хитрость заключается в использовании do.call со списком параметров, в который вы помещаете все свои аргументы для своей функции.Затем вы фильтруете этот список, чтобы отфильтровать «пропущенные» значения.Для параметра в textInput это может быть пустая строка (. == "") или любой другой критерий, по которому вы решаете, что это «пропущенный» вход.

f <- function(y, x) if (missing(x)) "is missing" else "present"

ui <- fluidPage(textInput("ti", "Set Arg:"), 
                verbatimTextOutput("out"))

server <- function(input, output) {
  output$out <- renderPrint({
     ## put all your potential args (optional and non optional) in a list 
     args <- list(y = 1, x = input$ti)
     ## Filter out NULL values
     ## define Filter fun which returns TRUE if you consider the value valid
     is_valid <- function(.) !is.null(.) && . != ""
     ## Filter out non valid args
     args <- Filter(is_valid, args)
     ## Use do.call to run your fun (non valid args are not set)
     list(inp = input$ti,
          out = do.call(f, args))
  })
}

shinyApp(ui, server)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...