2016-08-19 5 views
0

例:他のobserveEventからdataframeにアクセスする方法は?

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) 
    }) 
}) 

のDataTableを観察するイベントにアクセスすることができますabove.How示すように、プログラム中の2個のエラーがありますか?

+0

あなたのデータは 'observeEvent'関数で定義されています...そのため、ボタン関数内ではわかりません。データをグローバルに、または 'shinyServer'の中に直接定義します。 – drmariod

+0

Sirですが、datatable1とdatatable2をラジオボタンをクリックしたときにのみdataframeに割り当てる必要があります。そのため、observeEventにデータを入れています。 – Rad

+1

http://shiny.rstudio.com/tutorial/lesson6/ここのような反応式に精通してください。ラジオボタンの選択に基づいてデータを更新する方法と、他の関数でデータを使用する方法 – drmariod

答えて

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) 
関連する問題