5

私の光沢のあるアプリには 2 つのタブがあります。タブ 1 には、checkboxInput と、server.R で renderUI としてエンコードされ、ボックスがチェックされている場合にのみ表示される selectInput があります。タブ 2 には、selectInput がタブ 1 に表示された場合にのみ、リアクティブ関数によって作成されるデータ フレームをプロットする ggvis 関数があります。

予期せず、最初にタブ 2 をクリックしてからタブ 1 に戻らない限り、selectInput はタブ 1 に表示されません。

どうやら、私はリアクティブ関数のアイデアを正しく理解していません。私の間違いがどこにあるのか教えてください。ありがとう!

PS 構造は非常に複雑ですが、「実際の」アプリに必要なものです。

ui.R

library(ggvis)

shinyUI(navbarPage("",
                   tabPanel("1",
                              checkboxInput("START", label = "Start calculations", value = F),
                              htmlOutput("SELECT")
                   ),
                   tabPanel("2",
                            ggvisOutput("PLOT")
                   )
))

サーバー.R

library(ggvis)

shinyServer(function(input, output, session) {

  output$SELECT<-renderUI({ 
    if (input$START==T) {
    selectInput("SELECTINPUT","Make your choice:",c(1,2))
    }
  })

  PLOTDF<-reactive({
    if (is.null(input$SELECTINPUT)==F) {
      plotdf<-data.frame(c(1,1,2,2),c(1,2,3,4))
      colnames(plotdf)<-c("X","Y")
      plotdf
    }
  })

  reactive({
    PLOTDF() %>% ggvis(~X,~Y) %>% layer_points
    }) %>% bind_shiny("PLOT")

})
4

1 に答える 1