Сброс поля ввода до нуля после нажатия кнопки в R Shiny

Я создаю приложение, в котором пользователи могут вводить значения данных для таблицы по столбцу. После нажатия кнопки ДОБАВИТЬ введенные значения будут добавлены по столбцу к существующему. например если введены col1, 2, 3 и нажата кнопка ADD, мы имеем на дисплее

col1
   2
   3

и если col2, 4, 7 введены и нажата кнопка ADD, у нас есть дисплей

col1 col2
   2    4
   3    7

и т.п.

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

ui.R

shinyUI(pageWithSidebar(
headerPanel("My data table"),
sidebarPanel(h5("Enter input"),
           textInput("colname","Enter Column Name",NA),
           numericInput("x","X",NA),
           numericInput("y","Y",NA),
           br(),
           actionButton("Add","ADD")),
mainPanel(verbatimTextOutput("out"))
))

А также

server.R

shinyServer(function(input,output){

myTable <- reactive({
if(input$Add > 0)
  return(isolate({
    colnm <- input$colname
    x <- input$x
    y <-  input$y
    result <- data.frame(rbind(colnm,x,y))
    result
  }))
})

output$out <- renderTable({
myTable()
 })

})

person Tunde Awosanya    schedule 02.05.2014    source источник


Ответы (1)


Таблицу необходимо визуализировать с использованием renderTable, а не verbatimTextOutput. Я думаю, вы хотите сохранить старые входные данные. Один из способов сделать это — использовать reactiveValues. РЕДАКТИРОВАТЬ: я не видел, чтобы вы хотели сбросить входные данные. Для сброса входов используйте функции updateNumericInput и updateTextInput. Вам также нужно будет передать переменную session в вашу функцию server.

runApp(
  list(ui = pageWithSidebar(
    headerPanel("My data table"),
    sidebarPanel(h5("Enter input"),
                 textInput("colname","Enter Column Name",NA),
                 numericInput("x","X",NA),
                 numericInput("y","Y",NA),
                 br(),
                 actionButton("Add","ADD")),
    mainPanel(tableOutput("out"))
  ),

  server = function(input,output,session){
    myValues <- reactiveValues()

    observe({
      if(input$Add > 0){
        isolate({
          colnm <- input$colname
          x <- input$x
          y <-  input$y
          if(!is.null(myValues$myDf)){
            myValues$myDf <- cbind(myValues$myDf, 
                                   data.frame(setNames(list(c(x, y)), colnm))
            )
          }else{
            myValues$myDf <- data.frame(setNames(list(c(x, y)), colnm))
          }

        })
        updateNumericInput(session, "x","X", NA)
        updateNumericInput(session, "y","Y", NA)
        updateTextInput(session, "colname","Enter Column Name",NA)
      }
    })

    output$out <- renderTable({
      myValues$myDf
    })

  })
)

РЕДАКТИРОВАТЬ:

Вы можете изменить на

    updateNumericInput(session, "x","X", 3)
    updateNumericInput(session, "y","Y", 5)
    updateTextInput(session, "colname","Enter Column Name",'Default NAME')

и это работает. Теперь значения меняются на значения по умолчанию 3,5 и «ИМЯ по умолчанию».

person jdharrison    schedule 03.05.2014
comment
Я заинтригован, не знал, что можно запустить приложение в одном файле, хорошая идея. Мне не ясно, что означают NA в функциях обновления числового и текстового ввода. Я предполагаю, что это то, что устанавливает поле для очистки или очистки полей? Кроме того, я пытался изменить NA на значения, отличные от NA, но приложение зависает и не возвращает таблицу или не добавляет столбцы, пожалуйста, что может быть причиной этого? - person Tunde Awosanya; 04.05.2014
comment
NA означает нулевые значения. Вы можете изменить числовое значение NA на числовое, а текст на символ, и это сработает. - person jdharrison; 04.05.2014
comment
Я изменил значения NA, но когда я нажимаю «Добавить», ничего не появляется. Кроме того, я должен использовать функцию наблюдения? Если да, то почему? Я использовал кнопку действия без функции наблюдения. Что именно он делает? - person Tunde Awosanya; 04.05.2014
comment
Имейте в виду, что изменение не происходит мгновенно: сообщения собираются и отправляются после завершения работы всех наблюдателей (включая выходные данные). [shiny.rstudio.com/reference/shiny/0.14/updateTextInput.html] - person Denis Cousineau; 25.06.2021