R блестящая ошибка при рендеринге ввода текста для вывода DT - PullRequest
0 голосов
/ 28 февраля 2020

У меня действительно странная проблема при рендеринге ввода текста для DT в моем блестящем приложении. В textinput хранится некоторое значение, которое используется в качестве одной из настроек приложения. Эти настройки хранятся в реактивном списке, один элемент списка - это data.table, в котором хранятся все настройки для рендеринга.

Я сделал воспроизводимый пример вместо фрагментов кода. Не красиво, но это иллюстрирует.

library(shiny)

rv = reactiveValues()


ui <- shinyUI(fluidPage(

      textInput(inputId = "textinput", label = h3("Numeric input"), value = "some value"),
      tags$hr(),
      fluidRow(column(3, verbatimTextOutput("textinput"))),
      tags$hr(),
      tabPanel("Settings table for viewing", dataTableOutput('settings_table')),

))

server <- function(input, output, session) {
  observe({

    # lst_names = list()
    # lst_values = list()


    rv$textinput <-  renderText( input$textinput )
    output$textinput <- renderText({ input$textinput }) # this is displayed nicely

    # lst_names = c(lst_names, "rv$textinput") 
    # lst_values = c(lst_values, rv$textinput)        


    rv$settings = data.table(Var_names = "rv$textinput", Var_values = rv$textinput)

    })

  output$settings_table = DT::renderDataTable(options = list(pageLength = 50), {
    rv$settings
  })
}

shinyApp(ui, server)

Я нашел этот кусок текста в github DT, но я не могу найти способ заставить его работать. Та же проблема с числовым вводом, rendertext, renderprint, перемещением rendertext / print из фрагмента «наблюдай».

Есть предложения?

1 Ответ

0 голосов
/ 02 марта 2020

Вы не пользуетесь добром dataTableOutput. Вы должны использовать DT::dataTableOutput или, что эквивалентно, DT::DTOutput.

library(shiny)
library(DT)

ui <- fluidPage(

  textInput(inputId = "textinput", label = h3("Numeric input"), 
            value = "some value"),
  tags$hr(),
  fluidRow(column(3, verbatimTextOutput("textinput"))),
  tags$hr(),
  tabPanel("Settings table for viewing", DTOutput('settings_table')),

)

server <- function(input, output, session) {

  output$textinput <- renderText({ input$textinput }) 

  rv <- reactiveValues()

  observe({

    rv$textinput <- input$textinput

    rv$settings <- data.frame(
      Var_names = "rv$textinput", 
      Var_values = rv$textinput
    )

  })

  output$settings_table <- renderDT(options = list(pageLength = 50), {
    rv$settings
  })

}

shinyApp(ui, server)
...