2016-03-14 4 views
2

Я пишу блестящее приложение, которое будет запрашивать базу данных несколько раз. Запросы могут занять некоторое время, поэтому я использую 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()?

ответ

4

condition = "(typeof input.df_data_rows_selected !== 'undefined' && input.df_data_rows_selected.length > 0)" для обеих записей, похоже, работает.

+0

Это не работает для меня. Как и раньше, панель «Do Thing» появляется после нажатия кнопки «Загрузить данные», но до выбора строки. – TARehman

+0

Человек, это тяжелый ... 'condition = 'input.df_data_rows_selected.length> 0')' становится очень близким, но не совсем там ... – cory

+0

'condition = 'input.df_data_rows_selected [0]! = Null ') 'такой же, как указано выше ... – cory

Смежные вопросы