Вот возможное решение проблемы.Сначала я использую переменную с именем 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
, то вы можете избавиться от функции наблюдения и использовать только наблюдающий.Если ваши данные не изменяются и таблица отображается только один раз, тогда избавьтесь от наблюдаемого события.Я пытался охватить все базы.