我是Shiny的新手,但我正在开发一个需要在UI和shinyServer之间来回的应用程序。为此,我熟悉了动态renderUI功能。但是,我有一些问题正确处理通过renderUI函数发送到UI的输入。
我编写了一个关于我的问题的快速玩具示例。
library(shiny)
ui <- fluidPage(
numericInput("cat.count", "How many cats do you have?", min = 0, value = 0),
checkboxInput('pet.check',"Do you other pets?", value = FALSE),
uiOutput("dog.input"),
uiOutput("dog.num")
)
server <- shinyServer(function(input,output){
output$dog.input <- renderUI({
if(input$pet.check){
return(checkboxInput("dog.check", "Do you have dogs?", value = FALSE))
}
})
output$dog.num <- renderUI({
if (exists("input$dog.check") & input&dog.check){
return(numericInput("dog.count", "How many dogs do you have?", min = 1,
value = 0))
}
})
})
shinyApp(ui = ui,server = server)
一旦这个玩具应用程序运行没有错误,“最终产品”将是一个简单的条形图,通过geom_bar与ggplot2图形显示用户拥有的宠物总数。
除了req()和exists()函数之外,我还研究了reactive()函数,但到目前为止,我已经在圈内运行了。
提前致谢!
答案 0 :(得分:3)
像这样的工作吗?
rm(list = ls())
library(shiny)
ui <- fluidPage(
numericInput("cat.count", "How many cats do you have?", min = 0, value = 0),
checkboxInput('pet.check',"Do you other pets?", value = FALSE),
uiOutput("dog.input"),
uiOutput("dog.num")
)
server <- shinyServer(function(input,output){
output$dog.input <- renderUI({
if(is.null(input$pet.check)){return()}
if(input$pet.check){
return(checkboxInput("dog.check", "Do you have dogs?", value = FALSE))
}
})
output$dog.num <- renderUI({
if(is.null(input$dog.check)){return()}
numericInput("dog.count", "How many dogs do you have?", min = 1, value = 0)
})
})
runApp(list(ui = ui, server = server))
答案 1 :(得分:0)
如果您输入类似
的语句A(x) & B(x)
进入R
,即使A
错误,B
和A(x)
也会得到评估。这是您的错误来自的地方。因此,最好使用嵌套的if
语句,如Pork Chop的答案