8

データベースに数回クエリを実行する Shiny アプリケーションを作成しています。クエリには時間がかかる場合があるためactionButton、ユーザーがいつクエリを開始するかを制御できるようにするために使用しています。

申請の大まかな流れは次のとおりです。

  • ユーザーはページをロードし、ボタンを押してデータベースから利用可能な選択肢をロードします。
  • ユーザーは利用可能な選択肢から行を選択し、より長い時間がかかるより大きなクエリを開始します。
  • クエリが完了すると、ユーザーは素敵な視覚化などを取得します。

オプションを使用してユーザーが DataTable から行を選択できるようにすることができることを知っています。selection現在、単一選択を有効にできるように開発ビルドを使用しています。私の問題は、ユーザーが選択するまで特定の条件付きパネルを非表示にする方法を考え出すことです。私が知る限り、選択肢の値は に格納されていinput$[data frame name]_rows_selectedます。ただし、値が選択されるまで、この値は NULL であるか、存在しません。

内部 R ロジックを反映する条件のcondition引数に渡す方法がわかりません。conditionalPanel()私が参照している動作を示す最小限の作業例を以下に書きました。

library(shiny)
library(DT)

# Create sample data
df_sample_data <- data.frame(name = c("John Smith","Jane Cochran","Belle Ralston","Quincy Darcelio"),
                             color = c("Red","Blue","Red","Green"),
                             age = c(25,52,31,29))

ui <-
    fluidPage(

        titlePanel("The Title!"),

        sidebarPanel(

            h1("Load Data"),
            actionButton("load_data","Load Data"),
            br(),
            conditionalPanel(

                h1("Do Thing"),
                actionButton("do_thing","Do Thing"),
                condition = "input.df_data_rows_selected !== undefined")
            ),

        mainPanel(

            dataTableOutput("df_data"),
            conditionalPanel(

                tableOutput("row_selected"),
                condition = "input.df_data_rows_selected !== undefined")
            )
    )

server <-
    function(input, output) {

        # This function loads the data (in reality it is a server operation)
        uFunc_ReactiveDataLoad <- eventReactive(eventExpr = input$load_data,valueExpr = {

            df_data <- df_sample_data
            return(list(display_table = datatable(data = df_data[c("name","age")],
                                                  options = list(dom = "tip"),
                                                  filter = "top",
                                                  selection = "single",
                                                  colnames = c("Person Name" = "name",
                                                               "Person Age" = "age")),
                        data_table = df_data))
        })
        output$df_data <- renderDataTable(expr = uFunc_ReactiveDataLoad()$display_table)
        output$row_selected <- renderTable(expr = uFunc_ReactiveDataLoad()$data_table[input$df_data_rows_selected,])
    }

shinyApp(ui = ui, server = server)

を使用する現在のセットアップではinput.df_data_rows_selected !== undefined、最初の を使用してデータがロードされるまで、パネルは非表示になっていますactionButton。ただし、ユーザーが行を選択しない限り、非表示のままにする必要があります。私は次のような他のことを試しました:

  • input.df_data_rows_selected !== null
  • input.df_data_rows_selected !== 'null'
  • input.df_data_rows_selected !== ''
  • input.df_data_rows_selected !== 'NULL'

...などですが、私は運がありませんでした。conditionR の NULL 値は、 への引数に使用される JavaScript でどのように表されconditionalPanel()ますか?

4

2 に答える 2