如何在Shiny中动态生成的conditionalPanel中格式化活动valueBox?

切特

有一个与有关的问题解决了我正在使用lapply生成动态R Shiny仪表板。每个动态生成的框都需要:

  • 做一堆我已经想通的东西(显示适当的图像,可折叠等)
  • 包含一个表,该表的值因框而异
  • 有一个接收输入的条件面板
  • 具有一个valueBox来显示取决于条件面板输入和单个边栏输入的计算结果

以下代码完成了大部分工作。但是,我有两个主要问题:

  1. 如果框开始折叠,则表和valueBox为空
  2. 在进行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)

伊斯米尔谢尔夫

您可以通过编程方式调用闪亮的输入,就像通过列出项目一样[[

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)

结果

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Excel中格式化单元格以显示活动列中的值?

来自分类Dev

如何在Grape中的参数中格式化DateTime

来自分类Dev

如何在Struts 2中格式化货币?

来自分类Dev

如何在Struts 2中格式化货币?

来自分类Dev

如何在服务用户活动供稿中格式化Alfresco'API参数activityFilter?

来自分类Dev

如何在 Flutter 中格式化 DateTime,如何在 Flutter 中获取当前时间?

来自分类Dev

如何在Angular 2中格式化JS对象中的日期?

来自分类Dev

如何在Django模板中格式化XMLtext

来自分类Dev

如何在Jmeter中格式化JSON响应?

来自分类Dev

如何在C中格式化小数?

来自分类Dev

如何在AngularJS的视图中格式化数据?

来自分类Dev

如何在Java中格式化日期范围?

来自分类Dev

如何在SQL SERVER中格式化日期时间

来自分类常见问题

如何在Vue组件中格式化货币?

来自分类Dev

如何在Aspose中格式化单元格

来自分类Dev

你如何在python中格式化日期时间

来自分类Dev

如何在Html.TextBoxFor中格式化DateTimeOffset?

来自分类Dev

如何在Qt小部件中格式化文本

来自分类Dev

如何在流星模板中格式化日期

来自分类Dev

如何在python中格式化电话号码

来自分类Dev

如何在Webmatrix中格式化GET请求的URL

来自分类Dev

如何在VBA中格式化日期和时间?

来自分类Dev

如何在SSRS矩阵报表中格式化数字?

来自分类Dev

如何在JSON对象中格式化此Date

来自分类Dev

如何在Android Studio中格式化注释?

来自分类Dev

如何在Highcharts中格式化X轴标签

来自分类Dev

如何在Symfony中格式化JSON输出

来自分类Dev

如何在EmbeddedJS中格式化日期

来自分类Dev

如何在python中格式化列表输出

Related 相关文章

热门标签

归档