R UpdateAbsetPanel不工作

R UpdateAbsetPanel不工作,r,shiny,R,Shiny,有人知道为什么这个简单的代码不起作用吗? 我试图做的是:每当用户单击运行按钮(input$runButton)时,使structure选项卡处于活动状态。当我单击运行按钮时,input$runButton的值会被更新,但选项卡不会更改为结构 以下是一个简单的可复制示例: server.R function(input, output, session) { #RUN button observeEvent(input$runButton, { updateTabsetPanel

有人知道为什么这个简单的代码不起作用吗? 我试图做的是:每当用户单击运行按钮(
input$runButton
)时,使
structure
选项卡处于活动状态。当我单击运行按钮时,
input$runButton
的值会被更新,但选项卡不会更改为
结构

以下是一个简单的可复制示例:

server.R

function(input, output, session) {

  #RUN button
  observeEvent(input$runButton, {
    updateTabsetPanel(session, "allResults", 'structure')
  })

  #VAR SELECTION
  output$inputVars <- renderText({
    if (input$runButton == 0)
      return()
    print("Vars Selected")

  })

  #STRUCTURE RESULT
  output$structure <- renderText({
    if (input$runButton == 0)
      return()
    print("Structure Results")

  })


}
fluidPage(

  titlePanel("Periscope Structure"),

  br(),

  sidebarPanel(
    fileInput(inputId="inFile", "Choose CSV File",
              accept = c(
                "text/csv",
                "text/comma-separated-values,text/plain",
                ".csv")
    ),

    checkboxInput("header", "Header", TRUE),
    numericInput("level", "Structure Level", 3, min = 2, max = 10),
    br(),
    actionButton("runButton", strong("Run!"))

  ),

  mainPanel(
      tabsetPanel(id = "allResults",
        tabPanel('Variable Selection', textOutput('inputVars')),
        tabPanel('Structure Result', textOutput('structure')))
      )
)

谢谢大家!

请注意,您需要为
选项卡面板
分配一个
,以便可以使用
updateTabsetPanel
调用将其激活,因此请尝试以下操作:

require(shiny)

ui <- fluidPage(

  titlePanel("Periscope Structure"),

  br(),

  sidebarPanel(
    fileInput(inputId="inFile", "Choose CSV File",
              accept = c(
                "text/csv",
                "text/comma-separated-values,text/plain",
                ".csv")
    ),

    checkboxInput("header", "Header", TRUE),
    numericInput("level", "Structure Level", 3, min = 2, max = 10),
    br(),
    actionButton("runButton", strong("Run!"))

  ),

  mainPanel(
    tabsetPanel(id = "allResults",
                tabPanel(value  = "inputVars",'Variable Selection', textOutput('inputVars')),
                tabPanel(value  = "structure",'Structure Result', textOutput('structure')))
  )
)

server <- function(input, output, session) {

  #RUN button
  observeEvent(input$runButton, {
    updateTabsetPanel(session, "allResults", 'structure')
  })

  #VAR SELECTION
  output$inputVars <- renderText({
    if (input$runButton == 0)
      return()
    print("Vars Selected")

  })

  #STRUCTURE RESULT
  output$structure <- renderText({
    if (input$runButton == 0)
      return()
    print("Structure Results")

  })


}

runApp(shinyApp(ui, server), launch.browser = TRUE)
require(闪亮)

ui请注意,您需要为
选项卡面板
分配一个
,以便可以使用
updateTabsetPanel
调用将其激活,因此请尝试以下操作:

require(shiny)

ui <- fluidPage(

  titlePanel("Periscope Structure"),

  br(),

  sidebarPanel(
    fileInput(inputId="inFile", "Choose CSV File",
              accept = c(
                "text/csv",
                "text/comma-separated-values,text/plain",
                ".csv")
    ),

    checkboxInput("header", "Header", TRUE),
    numericInput("level", "Structure Level", 3, min = 2, max = 10),
    br(),
    actionButton("runButton", strong("Run!"))

  ),

  mainPanel(
    tabsetPanel(id = "allResults",
                tabPanel(value  = "inputVars",'Variable Selection', textOutput('inputVars')),
                tabPanel(value  = "structure",'Structure Result', textOutput('structure')))
  )
)

server <- function(input, output, session) {

  #RUN button
  observeEvent(input$runButton, {
    updateTabsetPanel(session, "allResults", 'structure')
  })

  #VAR SELECTION
  output$inputVars <- renderText({
    if (input$runButton == 0)
      return()
    print("Vars Selected")

  })

  #STRUCTURE RESULT
  output$structure <- renderText({
    if (input$runButton == 0)
      return()
    print("Structure Results")

  })


}

runApp(shinyApp(ui, server), launch.browser = TRUE)
require(闪亮)

ui请注意,如果您使用的是闪亮的模块,则必须参考正确的会话。例如,如果单个选项卡是模块,则该选项卡的会话将无法切换到其他选项卡

要解决这个问题,实际上可以将所有选项卡的“父级”(容器)会话传递到选项卡模块的构造函数中,然后使用它

一个例子的概要

shinyUI(function(request) {
    source('page/search.R', local = T)
    source('page/app.R', local = T)
    fluidPage(
        tabsetPanel(id = 'inTabset',
            tabPanel(id = 'search', 'Search', searchUI('search'), value = 'search'),
            tabPanel(id = 'app', 'App', appUI('app'), value = 'app')
        )
    )
})

shinyServer(function(input, output, session) {
    source('page/search.R', local = T)
    source('page/app.R', local = T)
    searchSession = callModule(searchServer, 'search')
    callModule(appServer, 'app', session, searchSession)
})
发光模块

appUI = function(id) {
    ns = NS(id)
    tagList(
        actionButton(ns('sendToHeatmap'), 'Send ortholog groups to heatmap')
    )
}
appServer = function(input, output, session, parentSession, searchSession) {
    # listen to a button press and switch to tab
    observeEvent(input$sendToSearch, {
        updateTextInput(searchSession, 'searchBox', 'funsearchterm')
        updateTabsetPanel(parentSession, 'inTabset', selected = 'search')
    })
}

请注意,如果您使用的是闪亮的模块,则必须参考正确的会话。例如,如果单个选项卡是模块,则该选项卡的会话将无法切换到其他选项卡

要解决这个问题,实际上可以将所有选项卡的“父级”(容器)会话传递到选项卡模块的构造函数中,然后使用它

一个例子的概要

shinyUI(function(request) {
    source('page/search.R', local = T)
    source('page/app.R', local = T)
    fluidPage(
        tabsetPanel(id = 'inTabset',
            tabPanel(id = 'search', 'Search', searchUI('search'), value = 'search'),
            tabPanel(id = 'app', 'App', appUI('app'), value = 'app')
        )
    )
})

shinyServer(function(input, output, session) {
    source('page/search.R', local = T)
    source('page/app.R', local = T)
    searchSession = callModule(searchServer, 'search')
    callModule(appServer, 'app', session, searchSession)
})
发光模块

appUI = function(id) {
    ns = NS(id)
    tagList(
        actionButton(ns('sendToHeatmap'), 'Send ortholog groups to heatmap')
    )
}
appServer = function(input, output, session, parentSession, searchSession) {
    # listen to a button press and switch to tab
    observeEvent(input$sendToSearch, {
        updateTextInput(searchSession, 'searchBox', 'funsearchterm')
        updateTabsetPanel(parentSession, 'inTabset', selected = 'search')
    })
}

您是否将
会话
作为
服务器
函数的参数之一?是的,我有会话。请参见上面的可复制代码。谢谢您是否将
会话
作为
服务器
函数的参数之一?是的,我有会话。请参见上面的可复制代码。谢谢是的,就是这样!非常感谢,猪排!是的,就是这样!非常感谢,猪排!是否有一种方法可以将变量传递给selected,而不是像
selected='search'
这样的
selected=val_sel
?当我使用时,它没有响应,怀疑我是否没有按预期传递它
appServer=function(输入,输出,会话,parentSession,val_sel){observeEvent(输入$sendToSearch,{updateTabsetPanel(parentSession,'inTabset',selected=val_sel)}
我现在不再使用闪亮的应用程序,所以我不确定,但是我认为selected='search'只是一个默认值,然后您仍然可以切换。有没有一种方法可以将变量传递给selected而不是
selected='search'
类似
selected=val_sel
的东西?当我使用时,它没有响应,怀疑我是否没有按预期传递它
appServer=function(输入,输出,会话,parentSession,val_sel){observeEvent(输入$sendToSearch,{updateTabsetPanel(parentSession,'inTabset',selected=val_sel)}
我现在不再使用闪亮的应用程序,所以我不确定,但我认为selected='search'只是一个默认值,然后您仍然可以切换。