繁体   English   中英

观察事件中的闪亮反应数据集

[英]Shiny reactive dataset within observeEvent

我有一个非常简单的应用程序,但失败了。 它失败的原因是反应性数据集仅在observeEvent函数内可用,而在外部则不可用。 我使用observeEvent从两个不同的来源获取数据集。 对于此示例,我仅使用了cbind。 我的实际代码要复杂得多。

这是一个与逻辑/语法有关的问题,但我的所有搜索都很短。 本质上,我希望merged_data()可用于应用程序的所有部分。

最小repr示例-之所以失败,是因为merged_data()在ObserveEvent之外不可用。

library(shiny)
library(shinyjs)
library(DT)

# Define UI for application that draws a histogram
ui <- fluidPage(

   # Application title
   titlePanel("testing 1 2 3"),

   # Sidebar with a slider input for number of bins 
   sidebarLayout(
      sidebarPanel(
      ),


      # Show a plot of the generated distribution
      mainPanel(
         fluidRow(
            column(width = 2,
                   offset = 0,
                   align = "center",
                   actionButton(inputId = "fetch_data_inputId",
                                label = "data")

            ) #column
            ,
            column(width = 10,
                   offset = 0,
                   align = "center",
                   DT::dataTableOutput("DT1")
            ) #column

         )#fluidrow
      )
   )
)

# Define server logic required to draw a histogram
server <- function(input, output,session) {

   observeEvent(input$fetch_data_inputId, {

      req(iris) 

      button_data <- colnames(iris)

      merged_data <- reactive({

         if( !is.null(cbind(iris[,1:4],iris3))) {
            cbind(iris[,1:4],iris3)
         } else {NULL}
      })


   }) #observeevent

   output$DT1 <- renderDataTable({#

      rendered_table <- merged_data()

      DT::datatable(rendered_table)
   })   


}

# Run the application 
shinyApp(ui = ui, server = server)

最小再版的例子-这个工作 ,因为该数据表上的ObserveEvent内创建。

library(shiny)
library(shinyjs)
library(DT)

# Define UI for application that draws a histogram
ui <- fluidPage(

   # Application title
   titlePanel("testing 1 2 3"),

   # Sidebar with a slider input for number of bins 
   sidebarLayout(
      sidebarPanel(
      ),


      # Show a plot of the generated distribution
      mainPanel(
         fluidRow(
            column(width = 2,
                   offset = 0,
                   align = "center",
                   actionButton(inputId = "fetch_data_inputId",
                                label = "data")

            ) #column
            ,
            column(width = 10,
                   offset = 0,
                   align = "center",
                   DT::dataTableOutput("DT1")
            ) #column

         )#fluidrow
      )
   )
)

# Define server logic required to draw a histogram
server <- function(input, output,session) {

   observeEvent(input$fetch_data_inputId, {

      req(iris) 

      button_data <- colnames(iris)

      merged_data <- reactive({

         if( !is.null(cbind(iris[,1:4],iris3))) {
            cbind(iris[,1:4],iris3)
         } else {NULL}
      })


      output$DT1 <- renderDataTable({#

         rendered_table <- merged_data()

         DT::datatable(rendered_table)
      })   

   }) #observeevent



}

# Run the application 
shinyApp(ui = ui, server = server)

我真正需要的是让反应性数据集继续在observeEvent中创建,但是可以在ObserveEvent环境之外访问,以便在应用程序的其他部分中使用它,但是我怀疑这是错误的方法。 因此,任何可行的方法都会很棒。

library(shiny)
library(shinyjs)
library(DT)

# Define UI for application that draws a histogram
ui <- fluidPage(

   # Application title
   titlePanel("testing 1 2 3"),

   # Sidebar with a slider input for number of bins 
   sidebarLayout(
      sidebarPanel(
      ),


      # Show a plot of the generated distribution
      mainPanel(
         fluidRow(
            column(width = 2,
                   offset = 0,
                   align = "center",
                   actionButton(inputId = "fetch_data_inputId",
                                label = "data")

            ) #column
            ,
            column(width = 10,
                   offset = 0,
                   align = "center",
                   DT::dataTableOutput("DT1")
            ) #column

         )#fluidrow
      )
   )
)

# Define server logic required to draw a histogram
server <- function(input, output,session) {

   merged_data <- eventReactive(input$fetch_data_inputId, {
      req(iris) 

      button_data <- colnames(iris)

      if( !is.null(cbind(iris[,1:4],iris3))) {
         cbind(iris[,1:4],iris3)
      } else {NULL}

   }) #eventReactive

   output$DT1 <- renderDataTable({#
      rendered_table <- merged_data()
      DT::datatable(rendered_table)
   })   
}

# Run the application 
shinyApp(ui = ui, server = server)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM