R Shiny - conditionalPanel和条件值

时间:2014-09-24 10:13:28

标签: r shiny rstudio shiny-server

我的问题与此类似:R studio shiny conditional statements

我的ui.R看起来像这样:

...
radioButtons("yes_or_no", "Yes or No?", c("yes"=1, "no"=0)),
  conditionalPanel(
    condition = "input.yes_or_no == '1'",
      numericInput("num_1", "First numeric input", 0, min=0),
      numericInput("num_2", "Second numeric input",0, min=0),
      numericInput("num_3", "Third numeric input",0, min=0)
  ),
...

当radioButton设置为“no”且条件未得到遵守时,我希望值num_1num_2num_3等于0。并且因为ConditionalPanel只是一个“图形”条件,它只影响控件小部件而不影响它们的值。 根据这个问题的答案(R studio shiny conditional statements),我在server.R文件中实现了以下内容:

yes_or_no <- input$yes_or_no
num_1 <- input$num_1
num_2 <- input$num_2
num_3 <- input$num_3

if (input$yes_or_no == 0) {
  num_1 <- 0
  num_2 <- 0
  num_3 <- 0
}
myfunction(yes_or_no, num_1, num_2, num_3)

但这不起作用。当我向numericInputs输入值时,即使我将conditionalPanel设置为“no”,它们也会保持附加值 - 我的serverside if语句不会用0覆盖这些变量。

有谁知道,如何实现这个目标?提前谢谢!

1 个答案:

答案 0 :(得分:1)

好的,在Shiny Google-Group的帮助下,我想出了如何做到这一点。这是一个有效的例子:

server.R:

library(shiny)
shinyServer(function(input, output) {

  output$ttable1 = renderTable({

    output$num_2_ui <- renderUI({
      num_2 <- ifelse(input$yes_or_no == 0, 0, input$num_2)
      numericInput("num_2", "Value num_2", value=num_2, min=0)
    })

    yes_or_no <- input$yes_or_no
    num_2 <- input$num_2

    table1 <- data.frame(yes_or_no, num_2)
    print(t(table1))

  })
})

ui.R:

library(shiny)

shinyUI(fluidPage(

  titlePanel("test"),

  sidebarLayout(
    sidebarPanel(
      uiOutput("num_2_ui"),
      radioButtons("yes_or_no", "Yes or No?", c("yes"=1, "no"=0), selected="no")

    ),

    mainPanel(
      uiOutput("ttable1")
    )
  )
))

不确定它是否是唯一且最好的方式,但目前它对我有用。