Подтвердить что ты не робот

Добавьте значения в реактивную таблицу в блестящей

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

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

library(shiny)

runApp(list(
  ui=pageWithSidebar(headerPanel("Adding entries to table"),
                     sidebarPanel(textInput("text1", "Column 1"),
                                  textInput("text2", "Column 2"),
                                  actionButton("update", "Update Table")),
                     mainPanel(tableOutput("table1"))),
  server=function(input, output, session) {
    tableStart <- data.frame(Column1 = NA, Column2 = NA)
    newEntry <- reactive({
      input$update
      newLine <- isolate(c(input$text1, input$text2))
      })
    output$table1 <- renderTable({rbind(tableStart, newEntry())})
  }))
4b9b3361

Ответ 1

Я думаю, вы хотите использовать reactiveValues() для хранения фрейма данных. Вот возможное решение:

library(shiny)

runApp(list(
  ui=pageWithSidebar(headerPanel("Adding entries to table"),
                 sidebarPanel(textInput("text1", "Column 1"),
                              textInput("text2", "Column 2"),
                              actionButton("update", "Update Table")),
                 mainPanel(tableOutput("table1"))),
server=function(input, output, session) {
values <- reactiveValues()
values$df <- data.frame(Column1 = NA, Column2 = NA)
newEntry <- observe({
  if(input$update > 0) {
    newLine <- isolate(c(input$text1, input$text2))
    isolate(values$df <- rbind(values$df, newLine))
  }
})
output$table1 <- renderTable({values$df})
}))

Изменить

Чтобы избежать создания пустой строки, создайте пустой файл data.frame, а не один с NA:

values$df <- data.frame(Column1 = numeric(0), Column2 = numeric(0))

И индексирование кажется лучше для добавления строк, чем rbind() (что испортило имена столбцов... не знаю почему):

isolate(values$df[nrow(values$df) + 1,] <- c(input$text1, input$text2))