我的问题与此类似: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_1
,num_2
和num_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覆盖这些变量。
有谁知道,如何实现这个目标?提前谢谢!
答案 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")
)
)
))
不确定它是否是唯一且最好的方式,但目前它对我有用。