Обратитесь к обновленному идентификатору ввода интерфейса пользователя и рассчитайте сумму в Shiny - PullRequest
0 голосов
/ 04 февраля 2019

Я хотел бы создать блестящее приложение с двумя кнопками.Пользователи могут нажимать кнопку «Добавить пользовательский интерфейс» столько раз, сколько захотят, что приведет к появлению текстовых полей.Затем пользователи могут вводить числа в поля ввода, нажимать кнопку «Сумма» и вычислять общую сумму.

Ниже приведен мой текущий код, модифицированный из примера кода из ?insertUI.У меня вопрос, я не уверен, как ссылаться на идентификатор ввода из обновленного пользовательского интерфейса (в этом случае, новые текстовые поля).Моя текущая попытка не может вычислить сумму.Конечный результат всегда равен 0.

# Define UI
ui <- fluidPage(
  actionButton("add", "Add UI"),
  actionButton("sum", "Sum"),

  # Report the output
  h4("The total from input"),
  textOutput("text")
)

# Server logic
server <- function(input, output, session) {
  observeEvent(input$add, {
    insertUI(
      selector = "#add",
      where = "afterEnd",
      ui = textInput(paste0("txt", input$add),
                     "Insert some text")
    )
  })

  # Calculate the total from the text inputs
  output$text <- eventReactive(input$sum, {
    as.character(sum(as.numeric(unlist(mget(ls(pattern = "^txt"))))))
  })
}

# Complete app with UI and server components
shinyApp(ui, server)

1 Ответ

0 голосов
/ 04 февраля 2019

Вы можете использовать специальную переменную Shiny input для проверки и доступа к текущим входам (и значениям) в вашем приложении.Таким образом, вы можете получить новые вставленные элементы пользовательского интерфейса (при условии, что все они следуют шаблону) и выполнить вычисления против них.

  output$text <- eventReactive(input$sum, {
    txt_inpt_names <- names(input)[grepl("^txt", names(input))]

    sum(sapply(txt_inpt_names, function(x) as.numeric(input[[x]])), na.rm = T)
  })

Live demo

Стоит отметить, что Shiny требуетоднократный (по одному) доступ к input значениям, поэтому требуется sapply(), а не просто input[[txt_inpt_names]].

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