在条件面板中使用相同输入的Shinydashboard多个条件

时间:2019-05-21 16:36:54

标签: r shiny shinydashboard

我正在使用ShinyDashboard构建一个应用程序。我想在sidebarMenu中显示有关所选tabItem和tabPanel的几个selectInput。相同的selectInput用于不同的tabItem。

这看起来很简单,但是我在使用与AND(&&&),OR(||)和IN(%in%)运算符同时使用倍数参数的conditionalPanel中的条件语法时遇到了麻烦。我尝试添加括号,但没有完成任务。

我编写了这段代码,它具有可复制性并且可以正常工作,但是没有执行我想要的操作,因为它始终显示selectInputs。

library(shinydashboard)
library(dplyr)

mtcars$gear <- as.character(mtcars$gear)
all_gears <- sort(unique(mtcars$gear))
mtcars$cyl <- as.character(mtcars$cyl)
all_cyl <- sort(unique(mtcars$cyl))


ui <- dashboardPage(
    dashboardHeader(title = "test"),
    dashboardSidebar(
        sidebarMenu(id="menu1",
            menuItem(
                "Dashboard",
                tabName = "dashboard",
                icon = icon("dashboard")
            ),
            menuItem(
                "Indicators",
                tabName = "indicators",
                icon = icon("info-circle")
            )
        ),
        conditionalPanel(
            condition = "input.menu1 == 'dashboard' && input.tabselected %in% c('1','2')",
            selectInput(
                inputId = "cylinders",
                label = "Select number of cylinders",
                choices = all_cyl,
                selected = '4',
                multiple = TRUE,
                selectize = FALSE
            )
        ),
        conditionalPanel(
            condition = "(input.menu1 == 'dashboard' && input.tabselected == 2) || input.menu1 == 'indicators'",
            selectInput(
                inputId = "gearsnumber",
                label = "Select number of gears",
                choices = all_gears,
                selected = '3',
                multiple = TRUE,
                selectize = FALSE
            )
        )
    ),
    dashboardBody(
        tabItems(
            tabItem(tabName = "dashboard",
                tabsetPanel(
                    tabPanel("Graph", value=1, plotOutput("plot")),
                    tabPanel("Table", value=2, dataTableOutput("table")),
                    tabPanel("Empty", value=3)
                )
            ),
            tabItem(tabName = "indicators",
                infoBoxOutput("totalweight")
            )
        )
    )
)

server <- function(input, output, session) {

    selectedDatacyl <- reactive({
        req(input$cylinders)
        df <- as.data.frame(mtcars)
        df$gear <- as.character(df$gear)
        df$cyl <- as.character(df$cyl)
        df <- mtcars
        df %>% dplyr::filter(cyl %in% input$cylinders)
    })

    selectedDatagears <- reactive({
        req(input$gearsnumber)
        df <- selectedDatacyl()
        df %>% dplyr::filter(gear %in% input$gearsnumber)
    })

    output$plot <- renderPlot({
        ggplot( data = selectedDatacyl(), aes(x = rownames(selectedDatacyl()), y = mpg)) + geom_point()
    })

    output$table <- DT::renderDataTable({
        DT::datatable(  data = selectedDatagears(),
                        options = list(pageLength = 14),
                        rownames = FALSE)
    })

    output$totalweight <- renderInfoBox({
        infoBox(
            "Total weight",
            paste0(sum(selectedDatagears()$wt), "lbs"), 
            icon = icon("chart-area"), 
            color = "green"
        )
    })

}

shinyApp(ui = ui, server = server)

我应该怎么做才能使这些条件可行?感谢所有贡献。

1 个答案:

答案 0 :(得分:0)

@OracleObject( name = "MY_TYPE_R" , javaType = MyRecordType.class , fields = { @PLSQLParameter(name = "COD_P") ,@PLSQLParameter(name = "COD_S") } ) 中的条件是JavaScript表达式,而不是R表达式。

所以您必须更换

@NamedPLSQLStoredFunctionQuery(
    name="testFunc",
    functionName="TEST_FUNC",
    returnParameter=@PLSQLParameter(
            name="RESULT",
            databaseType = "VARCHAR_TYPE"),
    parameters = {
            @PLSQLParameter(name = "PAR1", queryParameter="PAR1", databaseType = "VARCHAR_TYPE"),
            @PLSQLParameter(name = "PAR2", queryParameter="PAR2", databaseType = "MY_TYPE_T"),
    }
)

conditionalPanel

input.menu1 == 'dashboard' && input.tabselected %in% c('1','2')