在我的闪亮应用程序中,我有两个选项卡:选项卡1有一个checkboxInput和一个selectInput,它在server.R中编码为一个renderUI,仅在选中该框时显示.在选项卡2中,有一个ggvis函数,用于绘制仅当选项卡1中显示selectInput时通过反应函数生成的数据框.
出乎意料的是,除非我先单击选项卡2然后返回选项卡1,否则selectInput不会显示在选项卡1中,即使selectInput仅取决于同一选项卡中的复选框,即选项卡1.
显然,我没有理解正确的反应功能.你能否指出我的错误在哪里?谢谢!
附:结构非常复杂,但这是我对“真正的”应用程序所需要的.
ui.R
library(ggvis)
shinyUI(navbarPage("",
tabPanel("1",
checkboxInput("START", label = "Start calculations", value = F),
htmlOutput("SELECT")
),
tabPanel("2",
ggvisOutput("PLOT")
)
))
server.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")
})
最佳答案 不确定是什么is.null(输入$SELECTINPUT)== F正在做我猜想你想要的东西!is.null(输入$SELECTINPUT)也可能在观察者中包装ggvis调用并检查输入
以下适用于我:
library(ggvis)
library(shiny)
runApp(list(ui = navbarPage("",
tabPanel("1",
checkboxInput("START", label = "Start calculations", value = F),
htmlOutput("SELECT")
),
tabPanel("2",
ggvisOutput("PLOT")
)
)
, server = 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)) {
plotdf<-data.frame(c(1,1,2,2),c(1,2,3,4))
colnames(plotdf)<-c("X","Y")
plotdf
}
})
observe({
if (!is.null(input$SELECTINPUT)) {
PLOTDF() %>% ggvis(~X,~Y) %>% layer_points%>% bind_shiny("PLOT")
}
})
}
)
)