闪亮R-反应性不适用于条件面板

闪亮R-反应性不适用于条件面板,r,shiny,R,Shiny,问题: 在我的应用程序中,侧面板中有两个选项卡 统计和图表- 在统计信息中,我想根据主面板中选择的数据(选择输入选择数据)和选择分组输入(选择所选数据的列),显示数据框和一些描述性统计信息(工作正常) 在图表中,我有一个所选数据列的下拉列表,并希望为它们显示条形图 现在,如果我不将selectgroupinput的条件面板仅显示在Stat选项卡中,而将selectinput下拉到Chart选项卡中(即在选择数据时,列会自动更新),那么这项工作将顺利进行 现在,当我将条件面板放在这一点上时,它对“

问题:

在我的应用程序中,侧面板中有两个选项卡 统计和图表- 在统计信息中,我想根据主面板中选择的数据(选择输入选择数据)和选择分组输入(选择所选数据的列),显示数据框和一些描述性统计信息(工作正常)

在图表中,我有一个所选数据列的下拉列表,并希望为它们显示条形图

现在,如果我不将selectgroupinput的条件面板仅显示在Stat选项卡中,而将selectinput下拉到Chart选项卡中(即在选择数据时,列会自动更新),那么这项工作将顺利进行

现在,当我将条件面板放在这一点上时,它对“统计”选项卡起作用,但在“图表”选项卡中,列在更改数据集时无法正常工作。

我必须单击Stat选项卡,然后再次单击back to Charts选项卡,以使数据的实际列显示在下拉列表中-简言之,数据集和列下拉列表的反应性没有发挥应有的作用

我这里有一个可复制的代码示例:

代码: 服务器.r

ibrary(shiny)
#library(RODBC)
library(ggplot2)
#library(shinyjs)
#stat_helper_function to be used in rendering stat table 

summary <- function(x) {
  funs <- c(mean, median, sd, mad, IQR,max,min)
  lapply(funs, function(f) f(x, na.rm = TRUE))
}

make_stat <- function(data){
  numeric_columns <- sapply(data,is.numeric)
  stat_table <- sapply(data[,numeric_columns],summary)
  rows <- c("Mean","Median","SD","MAD","IQR","Max","Min")
  df <- data.frame(stat_table,row.names = rows)
}
#sample prototypeof Data
data_sets <- c("iris","diamonds")

shinyServer(function(input, output) {

  output$choose_dataset <- renderUI({
    selectInput("Dataset",label = "choose a dataset",as.list(data_sets))

  })

  output$choose_columns <- renderUI({

    if(is.null(input$Dataset))
      return()


    dat <<- get(input$Dataset) # make it globally accessable _saves the pain of multiple load of the data  
    colnames <- names(dat)


   checkboxGroupInput("columns", "Choose columns", 
                       choices  = colnames,
                       selected = colnames)
    })

  output$plot_control <- renderUI({

    if(is.null(input$Dataset))
      return()
    dat #<- get(input$Dataset)
    numeric_columns <- sapply(dat,is.numeric)
    num_dat <- dat[,numeric_columns]
    colnames <- names(num_dat)

    selectInput("selectize","For the X axis and Y axis",choices=colnames)

   }) 

  output$histo_gram <- renderPlot({

    if(is.null(input$Dataset))
      return()
    #z<- matrix(num_dat,ncol = ncol(num_dat)) 
    numeric_columns <- sapply(dat,is.numeric)
    num_dat <- dat[,numeric_columns]

    num_dat

    if (is.null(input$selectize) || !(input$selectize %in% names(num_dat)))
      return()

    z <- num_dat[,input$selectize]
   # bw <- diff(range(z)) / (2 * IQR(z) / length(z)^(1/3))

    qplot(z,geom ="histogram")

  }) 



  output$mytable1 <- renderDataTable({

    if(is.null(input$Dataset))
      return()


    #dat <- get(input$Dataset)
     dat

    if (is.null(input$columns) || !(input$columns %in% names(dat)))
      return()

    # Keep the selected columns
    dat <- dat[, input$columns, drop = FALSE]
    dat},  options=list(lengthMenu = c(5, 8, 10), pageLength = 5)
  ) 

  output$stat_table <- renderTable({

    dat #<- get(input$Dataset)
    num_dat <- dat[,input$columns,drop=FALSE]
    make_stat(num_dat)
      }

  )
  })
# This is the user-interface definition of a Shiny web application.
# You can find out more about building applications with Shiny here:
# 
# http://www.rstudio.com/shiny/
#

library(shiny)
library(ggplot2)

shinyUI (pageWithSidebar( 


headerPanel("Creepy-Stats"),
sidebarPanel(

      uiOutput("choose_dataset"),
      br(),
      conditionalPanel(
        condition ="input.conditionedPanels == 'Stats'",uiOutput("choose_columns")),
        conditionalPanel(condition ="input.conditionedPanels == 'Charts'" ,uiOutput("plot_control")), width = 2
#     
# uiOutput("choose_columns"),uiOutput("plot_control"),width = 2

  ),


  mainPanel(
    tabsetPanel(
      tabPanel("Stats", 


        div (class='row',
             div(dataTableOutput("mytable1"),class="span10"),

             div(tableOutput("stat_table"),class="span5")

        ),id = "conditionedPanels"
      )


      ,

      tabPanel("Charts",

        div(class='row', 
            div(plotOutput("histo_gram"),class="span10"))       
               ),id = "conditionedPanels"

    ),width = 10
  )
))