在renderDataTable中使用ifelse(闪亮)

时间:2017-06-22 17:24:47

标签: r shiny shiny-server

 #server

tables <- reactiveValues(XVALUES=data.frame(),
                     YVALUES=data.frame())

output$userinput <- renderDataTable({

  if(input$name=="X" &  input$city=="BOS" & (is.data.frame(tables$XVALUES) && nrow(tables$XVALUES)!=0)){
      cbind(data.frame(Serial=seq(1:5)),tables$XVALUES)}
  else if(input$name=="X" &  input$city=="BOS" & (is.data.frame(tables$XVALUES) && nrow(tables$XVALUES)==0)){}
  else if (input$name=="Y" & input$city=="NYC"  & (is.data.frame(tables$YVALUES) && nrow(tables$YVALUES)!=0)){
    cbind(data.frame(Serial=seq(1:5)),tables$YVALUES)}
  else if (input$name=="Y" & input$city=="NYC"  & (is.data.frame(tables$YVALUES) && nrow(tables$YVALUES)==0)){}

})

基于两个用户输入,我通过向XVALUES或YVALUES数据帧添加额外的串行列来创建并显示新数据帧。问题是即使XVALUES / YVALUES数据帧为空,它仍然显示串行列。如果XVALUES数据框为空,我不希望显示任何内容。我在哪里错了?

1 个答案:

答案 0 :(得分:0)

我无法重现该错误。我的机器上的表是空的。这是我输入的内容

server = function( input, output, session ){
  tables <- reactiveValues(XVALUES=data.frame(),
                           YVALUES=data.frame())

  output$userinput <- renderDataTable({
    if(input$name=="X" &  input$city=="BOS" & (is.data.frame(tables$XVALUES) && 
      nrow(tables$XVALUES)!=0)){
      cbind(data.frame(Serial=seq(1:5)),tables$XVALUES)}
    else if(input$name=="X" &  input$city=="BOS" & (is.data.frame(tables$XVALUES) && 
       nrow(tables$XVALUES)==0)){}
    else if (input$name=="Y" & input$city=="NYC"  & (is.data.frame(tables$YVALUES) && 
      nrow(tables$YVALUES)!=0)){
      cbind(data.frame(Serial=seq(1:5)),tables$YVALUES)}
    else if (input$name=="Y" & input$city=="NYC"  & (is.data.frame(tables$YVALUES) && 
       nrow(tables$YVALUES)==0)){}
  })
}

ui = fluidPage(
  selectInput("name","name",c("X","Y")),
  selectInput("city","city",c("BOS","NYC")),
  dataTableOutput("userinput")
)

shinyApp( ui, server )