如何从另一个observeEvent访问数据框?

时间:2016-08-19 08:07:41

标签: r shiny

一个例子:

UI.R

library(shiny)    
shinyUI(fluidPage(    
  titlePanel("Example"),    
  sidebarLayout(    
    sidebarPanel(    
      radioButtons("orderdata", "Sort by :",

                   c("Name" = "name",    
                     "MRDNo" = "mrdno"                        
                   ))
    ),   

    mainPanel(    
      uiOutput("deatilscv")    
    )
  )
))

Server.R    
library(shiny)    
library(shinyjs)

shinyServer(function(input, output) {    
  observeEvent(input$orderdata,
   {

     output$deatilscv <- renderUI({    
     if(input$orderdata=="name")    
     {

    mid<-c("1","2")    
    name<-c("a","b")

    datatable1 <- data.frame(mid,name)       
    fluidPage(shinyjs::useShinyjs(),    
              actionButton("button1", "CLICK")  )    
     }

    else if(input$orderdata=="mrdno")    
    {
      mid<-c("3","4")    
      name<-c("c","d")

      datatable2 <- data.frame(mid,name)    
      fluidPage(shinyjs::useShinyjs(),    
                actionButton("button1", "CLICK")  )
     }

     })    
  })

  observeEvent(        
    input$button1,{          
      a <- datatable1[1,2]  #this shows an error object 'datatable1' not found          
      print(a)
    })  
  observeEvent(

    input$button2,{

      a <- datatable2[1,2]  #this shows an error object 'datatable2' not found          
      print(a)
    })
})

程序中有两个错误,如上所示。在observe事件中如何访问数据表?

1 个答案:

答案 0 :(得分:0)

不确定您要完成的任务。也许你可以解释你的应用程序应该如何工作。我根据所选的单选按钮更改您的代码以显示数据集。您不需要将输出放在observeEvent中。

library(shiny)  
library(shinyjs)

ui <- shinyUI(fluidPage(

  titlePanel("Example"), 
  sidebarLayout( 
    sidebarPanel( 
      radioButtons("orderdata", "Sort by :", 
                   c("Name" = "name", 
                     "MRDNo" = "mrdno"    ))
        ), 

    mainPanel( 
      tableOutput("deatilscv") 
    )
  )
))


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

 # observeEvent(input$orderdata,   {

      output$deatilscv <- renderTable({ 

         if(input$orderdata=="name")   {

            mid        <- c("1","2");   name <-c("a","b") 
            datatable <- data.frame(mid,name)  
          #  fluidPage(shinyjs::useShinyjs(), actionButton("button1", "CLICK")  ) 

         }  else if(input$orderdata=="mrdno")  {

            mid<-c("3","4");  name<-c("c","d") 
            datatable <- data.frame(mid,name) 
           # fluidPage(shinyjs::useShinyjs(),   actionButton("button1", "CLICK")  )

         }


     }) 
  # }) 

  # observeEvent(  input$button1,{
  # 
  #              a <- datatable1[1,2]  #this shows an error object 'datatable1' not found 
  #               print(a)
  #            })  

  # observeEvent(  input$button2,{ 
  #     a <- datatable2[1,2]  #this shows an error object 'datatable2' not found 
  #     print(a)
  #   })
})

shinyApp(ui, server)