我构建了一个小型应用程序,它使用了一个开箱即用的条件面板。
第二次尝试不太令人满意。问题是无论条件是否满足,条件面板都会出现。
这是我在精简版中的内容:
library(shiny)
source('distplot.r')
ui<-fluidPage(
fluidRow(
radioButtons("intype", 'Data or Statistics?',
c(Data="d", Statistics="s")),
#Only show this if sample data are to be entered
conditionalPanel(
condition = "input$intype == 'd'",
textInput('x', 'Sample Data (Comma Separated)', value='')),
#Only shows this panel for summary statitics (sd or sigma if known)
conditionalPanel(
condition = "input$intype == 'r'",
numericInput('m','Sample Mean',value=''),
numericInput('sd','SD (Population or Sample)',value=''),
numericInput('n','Sample size',value=''))
)
)
server<-function(input, output){
DTYPE<-eventReactive(input$go,{input$dtype})
output$plot<-renderPlot({hist(runif(1000))})
}
shinyApp(ui=ui, server=server)
无论input$intype
的值如何,总是会出现两个条件面板。
你需要使用input.intype
而不是input$intype
。此外intype
在你的例子中只能是'd'
或's'
,你在你的条件下使用'r'
。
来自?shiny::conditionalPanel
的详细信息部分:
在JS表达式中,您可以引用包含输入和输出的当前值的输入和输出JavaScript对象。例如,如果您的id为foo的输入,则可以使用input.foo读取其值。 (请确保不要修改输入/输出对象,因为这可能会导致不可预测的行为。)