我正在构建一个Rshiny仪表板,我正在努力集成一些闪亮的交互式功能,我正在使用renderUI函数,我应该根据另一个输入的值创建其他小部件/输入参数参数。我遇到了一个简单的错误,但调试有困难。以下是包含相关代码的演示:
choices = c('All', 'None')
names(choices) = choices
ui <- fluidPage(theme = shinytheme('united'),
# create permanent input for shot chart type (should be 5 options)
selectInput(inputId = 'choice.input', label = 'Select a choice', multiple = FALSE,
choices = choices, selected = 'All'),
uiOutput('secondinput')
)
server <- shinyServer(function(input, output) {
if(input$choice.input == 'All') {
my.second.input <- c('a', 'b', 'c', 'd', 'e')
names(my.second.input) <- my.second.input
# player parameter for player whose shot chart will be shown
output$secondinput <- renderUI({
selectInput(inputId = 'another.input', label = 'Check this input', multiple = FALSE,
choices = my.second.input, selected = 'a')
})
}
})
shinyApp(ui, server)
我不确定这里有什么问题 - 我认为我在服务器函数中使用了renderUI(),名称匹配(输出$ secondinput,uiOutput('secondinput'))是正确的,但是这是我的错误......
请注意,我的完整代码有几个choice.input选项,我想在服务器中为每个(4-5)choice.input()值设置一个if()大小写。任何有关错误的帮助都表示赞赏,谢谢!
编辑 - 澄清一下,选择输入choice.input,标签为“选择一个选择”,应该始终显示。当此输入设置为“全部”时,我希望显示另一个输入,即第二个输入。如果choice.input未设置为“All”,那么我不希望显示第二个输入。希望这会有所帮助。
答案 0 :(得分:1)
这是您的代码版本。我不确定这是不是你想要的,这有点难以辨别,但希望你可以从那里拿走它。
choices = c('All', 'None')
names(choices) = choices
ui <- fluidPage(
# create permanent input for shot chart type (should be 5 options)
selectInput(inputId = 'choice.input', label = 'Select a choice', multiple = FALSE,
choices = choices, selected = 'All'),
uiOutput('secondinput')
)
server <- shinyServer(function(input, output) {
# player parameter for player whose shot chart will be shown
output$secondinput <- renderUI({
if(input$choice.input == 'All') {
my.second.input <- c('a', 'b', 'c', 'd', 'e')
names(my.second.input) <- my.second.input
selectInput(inputId = 'another.input', label = 'Check this input', multiple = FALSE,
choices = my.second.input, selected = 'a')
} else{
return(NULL)
}
})
})
shinyApp(ui, server)
发生的错误告诉您,您在没有被动上下文的情况下尝试访问被动值。您试图访问渲染函数或观察函数之外的输入值(它是被动的),这是反应性上下文。
如果你不明白这意味着什么,我强烈建议你阅读我写的一篇有光泽的教程,reactivity 101。
这里的第二个问题是你试图&#34;筑巢&#34;一个渲染函数,可以工作,但却是错误的思考方式,并暗示你可能没有真正掌握反应的概念并完全渲染函数。请注意,我将渲染功能移到了外面,这通常是闪亮编程的正确方法。如果你有一点时间,我建议观看Joe Cheng的(有光泽的)视频和有效的反应式编程I和II&#34;来自2016年闪亮的会议https://www.rstudio.com/resources/webinars/shiny-developer-conference/