I tried to make a minimal reproducible code that tries to simulate my problem. I would like to know why the RESCID$rr
object does not appear in renderDT
. When I comment out the command output$noshow
I can see the result of output$showw
. A priori I thought that reactiveValues
was not updating. However, when adding the output$showw
and commenting out the previous output, I saw that it is not quite that!Thanks for any help.
ui <- fluidPage(
# App title ----
titlePanel("CRM"),
# Sidebar layout with input and output definitions ----
sidebarLayout(
# Sidebar panel for inputs ----
sidebarPanel(
# Input: Choose dataset ----
actionButton("rockk", "Press rock!")
),
# Main panel for displaying outputs ----
mainPanel(
uiOutput("showw"),
uiOutput("noshow")
)
)
)
server <- function(input, output) {
# Reactive value for selected dataset ----
datasetInput <- reactive({
rock
})
RESCID <- reactiveValues(rr = NULL)
observeEvent(input$rockk,{
if(any(names(datasetInput())%in%'area') == TRUE){
newvar <- datasetInput()$area/datasetInput()$peri
media <- mean(newvar)
if(media > 3){
showModal(modalDialog(
title = "Important!",
"Would you like to add a constant to the data to increase the mean?",
footer = tagList(
actionButton("simfiltro","Yes"),
actionButton("naofiltro","No")
)
))
observeEvent(input$simfiltro, {
removeModal()
newarea <- datasetInput()$area 300
dados <- data.frame(datasetInput(),newarea)
RESCID$rr <- dados
RESCID$rr
})
}else{
RESCID$rr <- datasetInput()
RESCID$rr
}
}
})
output$noshow<- DT::renderDT({
req(RESCID$rr)
DT::datatable(
RESCID$rr,
escape=TRUE,
options = list(
pageLength = 10,
autoWidth = TRUE,
scrollX = TRUE)
)
})
output$showw <- renderUI({
HTML(paste('dataframe rows:', nrow(RESCID$rr)))
})
}
shinyApp(ui, server)
CodePudding user response:
You have a few issues. Nesting reactives is not a good idea. I have put it outside. Also, you need to specify what should happen when user clicks on No
in the modal dialog. Lastly, DTOutput
goes with renderDT
, and not uiOutput
. Try this
library(DT)
ui <- fluidPage(
# App title ----
titlePanel("CRM"),
# Sidebar layout with input and output definitions ----
sidebarLayout(
# Sidebar panel for inputs ----
sidebarPanel(
# Input: Choose dataset ----
actionButton("rockk", "Press rock!")
),
# Main panel for displaying outputs ----
mainPanel(
uiOutput("showw"),
DTOutput("noshow")
)
)
)
server <- function(input, output) {
# Reactive value for selected dataset ----
datasetInput <- reactive({
rock
})
RESCID <- reactiveValues(rr = NULL)
observeEvent(input$rockk,{
if(any(names(datasetInput())%in%'area') == TRUE){
newvar <- datasetInput()$area/datasetInput()$peri
media <- mean(newvar)
if(media > 3){
showModal(modalDialog(
title = "Important!",
"Would you like to add a constant to the data to increase the mean?",
footer = tagList(
actionButton("simfiltro","Yes"),
actionButton("naofiltro","No")
)
))
}else{
RESCID$rr <- datasetInput()
#RESCID$rr
}
}
})
observeEvent(input$simfiltro, {
removeModal()
newvar <- datasetInput()$area/datasetInput()$peri
newarea <- datasetInput()$area 300
dados <- data.frame(datasetInput(),newarea)
RESCID$rr <- dados
#RESCID$rr
})
observeEvent(input$naofiltro, {
removeModal()
RESCID$rr <- datasetInput()
})
output$noshow<- renderDT({
req(RESCID$rr)
DT::datatable(
RESCID$rr,
escape=TRUE,
options = list(
pageLength = 10,
autoWidth = TRUE,
scrollX = TRUE)
)
})
output$showw <- renderUI({
HTML(paste('dataframe rows:', nrow(RESCID$rr)))
})
}
shinyApp(ui, server)