R-观察者中有光泽的反应性数据集



我有一个非常简单的应用程序失败。失败的原因是反应性数据集仅在观察值函数中可用,而不是外部。我使用观察者从两个不同的来源获取数据集。在此示例中,我只是使用CBIND。我的实际代码要复杂得多。

这是一个逻辑/语法相关的问题,但我所有的搜索都浮出水面。本质上,我希望应用程序的所有部分都可以使用merged_data()。

最小repr示例 - 此失败,因为Merged_data()在观察者之外不可用。

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)

最小repr示例 - 此 works 因为在观察者中创建了数据表。

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)

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

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)

最新更新