【问题标题】:how to use conditionalpanel() in shiny r如何在闪亮的 r 中使用条件面板()
【发布时间】:2021-06-11 00:33:55
【问题描述】:

我正在尝试创建一个闪亮的应用程序,它允许您选择输入的操作计算。如果用户选择“加法”,它将显示两个数字输入框(因此他们可以输入两个数字),如果用户选择“正方形”,它将仅显示一个数字输入框。

有了这个,我使用conditionalPanel,如果满足条件,它会通过uiOutput()获取我想要的numericInputs。正方形也是一样。

现在,当我运行此应用程序时,条件面板不会出现。我哪里做错了?感谢您查看我的问题。

ui <- fluidPage( theme = shinytheme("slate"),
                 titlePanel("Basic Calculator"),
                 sidebarPanel(
                          selectInput("ops","Select what Operation use",choices = c("ADDITION","SQUARE")),
                   
                          helpText("Please input the appropriate number depending on the operations"),
                          conditionalPanel("input.ops=='ADDITION'", uiOutput("var2")),
                          conditionalPanel("input.ops=='SQUARE'", uiOutput("var1"))
                         
                          ),#sidebar panel
                  
                 
                   
)#fluidpage

server <- function(input, output) {
  
  output$basicmath <- renderText( ifelse(input$ops=="ADDITION",input$a+input$b,
                                  ifelse(input$ops=="SUBTRACTION",input$a-input$b,
                                  ifelse(input$ops=="SQUARE",input$a*input$a,
                                  ifelse(input$ops=="SQUARE ROOT",sqrt(input$a),
                                  ifelse(input$ops=="MULTIPLICATION",input$a*input$b,"not a valid operation"))))),
   
  output$var2 <- renderUI({
                            helpText("this will show to input two numerics to be added")
    
                          }) ,
  
  output$var1 <- renderUI({
                           helpText("this will show to input one numeric to square")
    
  })                             
      
)}


shinyApp(ui = ui, server = server)

【问题讨论】:

    标签: r shiny


    【解决方案1】:

    您遇到的关键问题是您将uiOutputs 放入了您预期的计算输出中。最好将它们分开,因为计算输出在具有必要的先决条件值(您的输入值)之前不会运行。此外,由于您没有为basicmath 指定输出位置,因此应用程序不知道在对renderText() 的调用中将任何内容放在哪里。下面是让正确的 UI 元素出现的工作代码。

    您在renderUI 中缺少的另一件事是使用tagList()。这有助于确保将所有元素打包在一起,而不仅仅是最后一个。

    请注意,数学部分不起作用,但它看起来只是一个占位符。当您开始使用它时,请务必为每个输入使用唯一的 ID。您有多个 input$a 和 input$b 实例,这可能不是一个可行的方法。

    library(shiny)
    library(shinythemes)
    
    ui <- fluidPage( theme = shinytheme("slate"),
                     titlePanel("Basic Calculator"),
                     sidebarPanel(
                       selectInput("ops","Select what Operation use",choices = c("ADDITION","SQUARE")),
                       helpText("Please input the appropriate number depending on the operations"),
                       conditionalPanel("input.ops=='ADDITION'", uiOutput("var2")),
                       conditionalPanel("input.ops=='SQUARE'", uiOutput("var1"))
                     ),
                     mainPanel(
                       textOutput("basicmath")
                     )
    )#fluidpage
    
    server <- function(input, output) {
    
      output$var2 <- renderUI({
        tagList(
          helpText("this will show to input two numerics to be added"),
          splitLayout(
            numericInput("var2a", label = "Input one number", value = NULL),
            numericInput("var2b", label = "Input another number", value = NULL)
          )
        )
      })
      
      output$var1 <- renderUI({
        tagList(
          helpText("this will show to input one numeric to square"),
          numericInput("var1a", label = "Input a number", value = NULL)
        )
      })
      
      output$basicmath <- renderText( {ifelse(input$ops=="ADDITION",input$a+input$b,
                                             ifelse(input$ops=="SUBTRACTION",input$a-input$b,
                                                    ifelse(input$ops=="SQUARE",input$a*input$a,
                                                           ifelse(input$ops=="SQUARE ROOT",sqrt(input$a),
                                                                  ifelse(input$ops=="MULTIPLICATION",input$a*input$b,"not a valid operation")))))
      })
    }
    
    shinyApp(ui = ui, server = server)
    

    【讨论】:

    • 谢谢先生。我运行了它,它起作用了!我现在要添加剩余的条件和操作。这真的很有帮助。
    • 很高兴它有帮助!不要忘记接受答案以向其他人表明它解决了问题。
    猜你喜欢
    • 2016-04-10
    • 1970-01-01
    • 1970-01-01
    • 2014-03-03
    • 2017-04-29
    • 1970-01-01
    • 2016-06-30
    • 1970-01-01
    • 2016-09-24
    相关资源
    最近更新 更多