我正在寫一個將查詢數據庫幾次的Shiny應用程序。查詢可能需要一些時間,所以我使用actionButton
來允許用戶控制它們何時啓動。基於R中NULL值的閃亮的條件面板條件?
應用程序的一般流程是:
- 用戶加載頁面,按下按鈕,從數據庫中可用的選項來加載。
- 用戶從可用選項中選擇一行,然後啓動一個更長的查詢。
- 查詢完成後,用戶將得到很好的可視化和其他類似的東西。
我知道,你可以允許用戶選擇使用selection
選項從一個DataTable行,我目前使用的開發建設,使單一的選擇可以啓用。我的問題是搞清楚如何隱藏某些條件面板,直到用戶做出選擇。據我所知,選擇的價值儲存在input$[data frame name]_rows_selected
。但是,直到選中這些值,該值爲NULL或不存在。
我無法弄清楚如何傳遞conditionalPanel()
參數condition
這個條件反映了內部的R邏輯。我在下面寫了一個最小的工作示例,其中顯示了我所指的行爲。
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'
...等等,但我有沒有運氣。 R中的NULL值如何在用於conditionalPanel()
的condition
參數的JavaScript中表示?
這似乎不適用於我。和以前一樣,一旦按下「加載數據」按鈕,但在選擇一行之前,就會出現「做事」面板。 – TARehman
男人,這是一個艱難的... ...''condition ='input.df_data_rows_selected.length> 0')'得到真的很接近,但不是那裏... – cory
'condition ='input.df_data_rows_selected [0]!= null ')'與上面相同... – cory