R 如何在动态生成的conditionalPanel中设置活动valueBox的格式?
我有一个关于你的问题。我正在使用lapply生成一个动态的R闪亮仪表板。每个动态生成的框需要:R 如何在动态生成的conditionalPanel中设置活动valueBox的格式?,r,shiny,R,Shiny,我有一个关于你的问题。我正在使用lapply生成一个动态的R闪亮仪表板。每个动态生成的框需要: 做一些我已经想好的事情(显示一个合适的图像,可以折叠,等等) 包含值随框变化的表的步骤 具有接收输入的条件面板的步骤 有一个valueBox,显示依赖于条件面板输入和单个侧栏输入的计算结果 下面的代码完成了大部分工作。然而,我有两个主要问题: 如果框开始折叠,则表和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()的提示,我现在将保持在安全距离。