Я пишу блестящее приложение, которое будет запрашивать базу данных несколько раз. Запросы могут занять некоторое время, поэтому я использую actionButton
, чтобы позволить пользователю контролировать, когда они будут запущены.Блестящие условия условной записи, основанные на значениях NULL в R?
Общий поток приложения: страница
- Пользователь загружает, кнопка для загрузки в доступных вариантов из базы данных выталкивает.
- Пользователь выбирает строку из доступных вариантов, а затем запускает более крупный запрос, который займет больше времени.
- Когда запрос будет выполнен, пользователь получит хорошие визуализации и другие подобные вещи.
Я знаю, что вы можете позволить пользователю выбирать строки из DataTable, используя опцию selection
, и я в настоящее время использую сборку разработки, так что выбор одного элемента может быть включен. Моя проблема заключается в том, как скрыть определенные условные панели, пока пользователь не сделает выбор. Насколько я могу судить, значение выбора сохраняется в input$[data frame name]_rows_selected
. Но, пока значения не будут выбраны, это значение равно NULL или не существует.
Не могу понять, как перейти к аргументу condition
из conditionalPanel()
условие, которое отражает внутреннюю логику 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'
... и так далее, но у меня не было никакой удачи. Как значение NULL в R представляется в JavaScript, используемом для аргумента condition
, для conditionalPanel()
?
Это не работает для меня. Как и раньше, панель «Do Thing» появляется после нажатия кнопки «Загрузить данные», но до выбора строки. – TARehman
Человек, это тяжелый ... 'condition = 'input.df_data_rows_selected.length> 0')' становится очень близким, но не совсем там ... – cory
'condition = 'input.df_data_rows_selected [0]! = Null ') 'такой же, как указано выше ... – cory