R 如何在动态生成的conditionalPanel中设置活动valueBox的格式?

R 如何在动态生成的conditionalPanel中设置活动valueBox的格式?,r,shiny,R,Shiny,我有一个关于你的问题。我正在使用lapply生成一个动态的R闪亮仪表板。每个动态生成的框需要: 做一些我已经想好的事情(显示一个合适的图像,可以折叠,等等) 包含值随框变化的表的步骤 具有接收输入的条件面板的步骤 有一个valueBox,显示依赖于条件面板输入和单个侧栏输入的计算结果 下面的代码完成了大部分工作。然而,我有两个主要问题: 如果框开始折叠,则表和valueBox为空 在进行valueBox计算时,我不知道如何访问输入到条件窗格中的值。我在下面的代码中强调了这一点 任何援助都是非

我有一个关于你的问题。我正在使用lapply生成一个动态的R闪亮仪表板。每个动态生成的框需要:

  • 做一些我已经想好的事情(显示一个合适的图像,可以折叠,等等)
  • 包含值随框变化的表的步骤
  • 具有接收输入的条件面板的步骤
  • 有一个valueBox,显示依赖于条件面板输入和单个侧栏输入的计算结果
下面的代码完成了大部分工作。然而,我有两个主要问题:

  • 如果框开始折叠,则表和valueBox为空
  • 在进行valueBox计算时,我不知道如何访问输入到条件窗格中的值。我在下面的代码中强调了这一点
  • 任何援助都是非常受欢迎的

    
    library('shiny')
    library('shinydashboard')
    
    ui <- dashboardPage( title="sample code",
       dashboardHeader( title="sample code",disable=TRUE ),
       
       dashboardSidebar(
          box( width=12,title="sidebar input",solidHeader=TRUE,status="warning",background = "black",
             tags$style(".skin-blue .sidebar a:link { color:orange; } a:visited {color:green;}"),
             "Some text in the sidebar",
             sliderInput(inputId = 'inputRatio', label='hello', 
             min = 0, max = 1, value = 0.5, ticks=FALSE, width = '200px'),
          )
       ),
       
       dashboardBody(
          uiOutput("boxes")
       )
    )
    
    server <- function(input, output, session) {
       
       tableWithData <- data.frame('colA'=c(1:10), 'colB'=c(11:20), 'colC'=c(21:30) )
    
       output$boxes <- renderUI({
          lapply( 1:5, function( inputRow ) {
             fluidRow(
                box( width=NULL, title=paste0('Row ',inputRow), status='warning',collapsible=TRUE,collapsed=FALSE,
                   fluidRow(
                      box( width=5,
                           p("table output", style="font-weight:bold"),
                           renderTable( tableWithData[ inputRow, ] )
                      ),
                      box( width=5,
                           radioButtons( paste0( 'row', inputRow, 'Param' ), 'Set a:' , inline=TRUE, selected = "min",  c("min"="min", "max"="max", "range"="range", "none"="none")),
                           
                           conditionalPanel(condition = paste0( "input.", 'row', inputRow, "Param != 'none'") ),
          
                           conditionalPanel(condition = paste0( "input.", 'row', inputRow, "Param == 'min'" ),
                                            numericInput( paste0(  'row', inputRow,'MinLimit' ), label="Minimum", value = 0, width = "90%") ),
    
                           conditionalPanel(condition = paste0( "input.", 'row', inputRow, "Param == 'max'" ),
                                            numericInput( paste0(  'row', inputRow,'MaxLimit' ), label="Maximum", value = 100, width = "90%") ),
                           
                           conditionalPanel(condition = paste0( "input.", 'row', inputRow, "Param == 'range'" ),
                                            numericInput( paste0(  'row', inputRow,'MinLimit' ), label="Minimum", value = 0, width = "90%"),
                                            numericInput( paste0(  'row', inputRow,'MaxLimit' ), label="Maximum", value = 100, width = "90%") )
                      ),
    # ***** This is where I need the most help **********
                      box( width=4,
                           renderValueBox({
                              valueBox( input$inputRatio * eval( paste0(  'row', inputRow,'MinLimit' ) ), subtitle="i am stuck", icon = icon("list"), color = "purple" )
                           })                  
    # ***************************************************
                      )
    
                   )
                )
             )
          })
       })
    
    }
    
    # Run the application 
    shinyApp(ui = ui, server = server)
    
    
    
    库(‘闪亮’)
    图书馆(“shinydashboard”)
    
    ui您可以通过
    [
    以编程方式调用闪亮的输入,就像列表项一样

    eval
    是邪恶的-避免它

    我想这就是你想要的:

    library('shiny')
    library('shinydashboard')
    
    ui <- dashboardPage( title="sample code",
                         dashboardHeader( title="sample code",disable=TRUE ),
                         
                         dashboardSidebar(
                           box( width=12,title="sidebar input",solidHeader=TRUE,status="warning",background = "black",
                                tags$style(".skin-blue .sidebar a:link { color:orange; } a:visited {color:green;}"),
                                "Some text in the sidebar",
                                sliderInput(inputId = 'inputRatio', label='hello', 
                                            min = 0, max = 1, value = 0.5, ticks=FALSE, width = '200px'),
                           )
                         ),
                         
                         dashboardBody(
                           uiOutput("boxes")
                         )
    )
    
    server <- function(input, output, session) {
      
      tableWithData <- data.frame('colA'=c(1:10), 'colB'=c(11:20), 'colC'=c(21:30) )
      
      output$boxes <- renderUI({
        lapply( 1:5, function( inputRow ) {
          fluidRow(
            box( width=NULL, title=paste0('Row ',inputRow), status='warning',collapsible=TRUE,collapsed=FALSE,
                 fluidRow(
                   box( width=5,
                        p("table output", style="font-weight:bold"),
                        renderTable( tableWithData[ inputRow, ] )
                   ),
                   box( width=5,
                        radioButtons( paste0( 'row', inputRow, 'Param' ), 'Set a:' , inline=TRUE, selected = "min",  c("min"="min", "max"="max", "range"="range", "none"="none")),
                        conditionalPanel(condition = sprintf( "input.row%sParam != 'none'", inputRow) ),
                        conditionalPanel(condition = sprintf("(input.row%sParam == 'min' || input.row%sParam == 'range')", inputRow, inputRow),
                                         numericInput( paste0(  'row', inputRow,'MinLimit' ), label="Minimum", value = NULL, width = "90%") ),
                        conditionalPanel(condition = sprintf("(input.row%sParam == 'max' || input.row%sParam == 'range')", inputRow, inputRow),
                                         numericInput( paste0(  'row', inputRow,'MaxLimit' ), label="Maximum", value = NULL, width = "90%") )
                   ),
                   box( width=4,
                        renderValueBox({
                          names(input)
                          inputID <- paste0('row', inputRow,'MinLimit')
                          valueBox( input$inputRatio * input[[inputID]], subtitle="i am stuck", icon = icon("list"), color = "purple" )
                        })
                   )
                   
                 )
            )
          )
        })
      })
      
    }
    
    # Run the application 
    shinyApp(ui = ui, server = server)
    
    library('shinny')
    图书馆(“shinydashboard”)
    
    ui如果有帮助,请接受下面的答案。干杯!太好了。谢谢!还有关于eval()的提示,我现在将保持在安全距离。