我为闪亮的应用程序构建了以下模板。
##ui.R
shinyUI(navbarPage("My Application",
tabPanel
(
"Select Data range",
sidebarLayout
(
sidebarPanel
(
h3("Select Data Range"),
selectInput("select", label = h3("Select Sector"),choices = list("Sector 1" = 1, "Sector 2" = 2,"Sector 3" = 3), selected = 1),br(),
dateRangeInput("dates", label = h3("Select Date range")),br(),
submitButton("Submit"),br(),
actionButton("action", label = "Proceed to select resolution")
),
mainPanel("Output")
)
),
tabPanel
(
"Select Resolution",
sidebarLayout
(
sidebarPanel
(
h3("Select Resolution"),
numericInput("num", label = h3("Select X-Grid Size"), value = 2),br(),
numericInput("num", label = h3("Select Y-Grid Size"), value = 2),br(),
numericInput("num", label = h3("Outlier Removal"), value = 2),br(),
numericInput("num", label = h3("Frequency"), value = 2),br(),
submitButton("Submit"),br(),
#actionButton("action", label = "Proceed to Service Parameters")
),
mainPanel("Output")
)
)
))
现在服务器文件保持为空:
##server.R
shinyServer(function(input, output) {
})
理想情况下,我想在第一个tabPanel上使用类似操作按钮的输入来导航到第二个选项卡面板。任何关于替代方案的建议都会受到同样的赞赏。
答案 0 :(得分:7)
您可以发送自定义消息:
ui.R
shinyUI(navbarPage("My Application",
tabPanel
(
"Select Data range",
sidebarLayout
(
sidebarPanel
(tags$head(tags$script('
Shiny.addCustomMessageHandler("myCallbackHandler",
function(typeMessage) {console.log(typeMessage)
if(typeMessage == 1){
console.log("got here");
$("a:contains(Select Resolution)").click();
}
if(typeMessage == 2){
$("a:contains(Select Data range)").click();
}
});
')),
h3("Select Data Range"),
selectInput("select", label = h3("Select Sector"),choices = list("Sector 1" = 1, "Sector 2" = 2,"Sector 3" = 3), selected = 1),br(),
dateRangeInput("dates", label = h3("Select Date range")),br(),
actionButton("action", label = "Proceed to select resolution")
),
mainPanel("Output")
)
),
tabPanel
(
"Select Resolution",
sidebarLayout
(
sidebarPanel
(
h3("Select Resolution"),
numericInput("num1", label = h3("Select X-Grid Size"), value = 2),br(),
numericInput("num2", label = h3("Select Y-Grid Size"), value = 2),br(),
numericInput("num3", label = h3("Outlier Removal"), value = 2),br(),
numericInput("num4", label = h3("Frequency"), value = 2),br(),
actionButton("action1", label = "Proceed to Service Parameters")
),
mainPanel("Output"),
)
)
))
server.R
library(shiny)
shinyServer(function(input, output,session) {
observe({
if(input$action > 0){
print('1')
session$sendCustomMessage("myCallbackHandler", "1")
}
})
observe({
if(input$action1 > 0){
print('2')
session$sendCustomMessage("myCallbackHandler", "2")
}
})
}
)
此外,您不能拥有具有相同ID的对象。请注意,您的所有numericInput
和actionButton
都具有相同的ID。此外,我删除了提交按钮,不确定您是否需要其中一个。