在我闪亮的应用程序中,我有两个选项卡:选项卡 1 有一个 checkboxInput 和一个 selectInput,它在 server.R 中被编码为 renderUI,只有在选中该框时才会显示。In the tab 2, there is a ggvis function to plot a data frame that is made through a reactive function only when selectInput was shown in the tab 1.
出乎意料的是,除非我先单击选项卡 2,然后返回到选项卡 1,否则 selectInput 不会显示在选项卡 1 中,即使 selectInput 仅依赖于同一选项卡(即选项卡 1)中的复选框。
显然,我没有正确理解反应函数。你能指出我的错误在哪里吗?谢谢!
PS 结构相当复杂,但它是我的“真正”应用程序所需要的。
用户界面
library(ggvis)
shinyUI(navbarPage("",
tabPanel("1",
checkboxInput("START", label = "Start calculations", value = F),
htmlOutput("SELECT")
),
tabPanel("2",
ggvisOutput("PLOT")
)
))
服务器.R
library(ggvis)
shinyServer(function(input, output, session) {
output$SELECT<-renderUI({
if (input$START==T) {
selectInput("SELECTINPUT","Make your choice:",c(1,2))
}
})
PLOTDF<-reactive({
if (is.null(input$SELECTINPUT)==F) {
plotdf<-data.frame(c(1,1,2,2),c(1,2,3,4))
colnames(plotdf)<-c("X","Y")
plotdf
}
})
reactive({
PLOTDF() %>% ggvis(~X,~Y) %>% layer_points
}) %>% bind_shiny("PLOT")
})