Отладка блестящего рендера * вывод - PullRequest
0 голосов
/ 14 ноября 2018

Я пытаюсь отладить мою блестящую приборную панель

Для нескольких функций рендеринга * мне нужно отладить их с помощью некоторого журнала (с печатью или cat), но я не могу использовать эти функции внутри renderDataTable() / renderText()

например:

  output$selectedData = renderDataTable(
    myCsv[which(myCsv[[myCase_id]]==input$process_tokens),]
  )

Я хотел бы напечатать что-нибудь на консоли до и после инструкции renderDataTable(), но

  output$selectedData = renderDataTable(
    cat("rendering...")
    myCsv[which(myCsv[[myCase_id]]==input$process_tokens),]
    cat("rendered")
  )

Как я могу это сделать?

1 Ответ

0 голосов
/ 14 ноября 2018

Вот возможное решение проблемы.Сначала я использую переменную с именем data для присвоения любых вычислений, в вашем случае data<-myCsv[which(myCsv[[myCase_id]]==input$process_tokens),].Это используется внутри функции рендеринга и будет создано при визуализации вывода, поскольку оно полагается на это.Затем я использую функцию наблюдения, которая требует создания переменной data перед выводом второго "rendered" на консоль.Это работает один раз при запуске и будет работать нормально, если ваши данные постоянны.Если у вас есть изменяющиеся данные, в моем примере данные изменяются в зависимости от выбора пользователя, нам придется заново визуализировать таблицу.Поскольку функция рендеринга является реактивной, и вы используете входные данные $ process_tokens, функция рендеринга будет перезапущена при изменении ввода.В этом примере он запускается при изменении input$select.Когда он запускается, он сбрасывает переменную data в NULL, и мы запускаем отдельную observeEvent, которая отслеживает изменения для ввода $ select (input $ process_tokens).Для этого observeEvent также требуются данные перед продолжением, и, поскольку функция рендеринга установила их на ноль, она не будет печатать второй «рендеринг» до тех пор, пока данные не будут созданы, как в первом случае.

library(shiny)
library(DT)

ui <- fluidPage(
  sidebarLayout(
    sidebarPanel(
  selectizeInput("select","select",choices=(c(1,2,3,4)))
    ),
  mainPanel(
   dataTableOutput("selectedData")
  )

))

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

  data<-reactive({data.frame(input$select,4,5)})

  output$selectedData <- renderDataTable({
    data<-NULL
    print("rendering..")
    data<-datatable(data())
  })

  #Observe inital rendering (only needed if no change to data)
  observe({
    req(data)
    print("rendered!")
    })

  #Observe Changes to data
  observeEvent(input$select,{
    req(data)
    print("rendered!")
  })
}

shinyApp(ui, server)

Определенокод для вас:

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

      output$selectedData <- renderDataTable({
        data<-NULL
        print("rendering..")
        data<- myCsv[which(myCsv[[myCase_id]]==input$process_tokens),]
      })

      #Observe inital rendering (only needed if no change to data)
      observe({
        req(data)
        print("rendered!")
        })

      #Observe Changes to data
      observeEvent(input$process_tokens,{
        req(data)
        print("rendered!")
      })
    }

    shinyApp(ui, server)

Обратите внимание, что вы получите две «отрендеренные» распечатки при первоначальном запуске программы, так как это выполняется одновременно с наблюдением и наблюдением, так как выполняются оба условия.Если ваши данные меняются с input$process_tokens, то вы можете избавиться от функции наблюдения и использовать только наблюдающий.Если ваши данные не изменяются и таблица отображается только один раз, тогда избавьтесь от наблюдаемого события.Я пытался охватить все базы.

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