将反应式用户界面包装在动作按钮RShiny中

将反应式用户界面包装在动作按钮RShiny中,r,tabs,reactive-programming,shiny,R,Tabs,Reactive Programming,Shiny,我有一个选项卡式UI,每当用户选择datatable中的行时就会显示出来(在下面的代码中,输出是随机的,在现实生活中,计算非常复杂) 我想条件的选项卡式用户界面显示到点击一个按钮。当前,每次选择其他行时,它都会对已选择的行重新进行计算。我想在用户选择完他想要查看的所有行后,将其限制为一次性计算 library(shiny) library(DT) UI:表、操作按钮和选项卡部分 ui <- fluidPage( mainPanel( fluidRow( colum

我有一个选项卡式UI,每当用户选择datatable中的行时就会显示出来(在下面的代码中,输出是随机的,在现实生活中,计算非常复杂)

我想条件的选项卡式用户界面显示到点击一个按钮。当前,每次选择其他行时,它都会对已选择的行重新进行计算。我想在用户选择完他想要查看的所有行后,将其限制为一次性计算

library(shiny)
library(DT)
UI:表、操作按钮和选项卡部分

ui <- fluidPage(
  mainPanel(
    fluidRow(
      column(12,DT::dataTableOutput(outputId = 'tableCurrencies'))
    ),
    actionButton(inputId = 'showSelectedButton',label = 'Show Selec'),
    fluidRow(
      uiOutput("myTabUI")
    )
  )
)
我不知道该怎么解决这个问题。欢迎任何帮助。

您可以使用
隔离()
来限制被动依赖关系

library(shiny)
library(DT)

ui <- fluidPage(
  mainPanel(
    fluidRow(
      column(12,DT::dataTableOutput(outputId = 'tableCurrencies'))
    ),
    actionButton(inputId = 'showSelectedButton',label = 'Show Selec'),
    fluidRow(uiOutput("myTabUI"))
  )
)

server <- function(input,output){
  output$tableCurrencies <- DT::renderDataTable({
    data.frame(a=rnorm(10),b=rnorm(10),c=rnorm(10))})     
  origTable_selected <- reactive({
    input$tableCurrencies_rows_selected        
  })      
  output$myTabUI <- renderUI({
    input$showSelectedButton
    myTabs <- lapply(isolate(origTable_selected()),function(i) {          
      tabName <- paste0("test",i)          
      a <- renderPlot({hist(rnorm(50))})
      output[[paste0(tabName,"rates")]] <- a
      return(tabPanel(
        tabName,
        fluidRow(column(6,plotOutput(paste0(tabName,"rates"))))
      ))
    })
    do.call(tabsetPanel,myTabs)
  })
}

shinyApp(ui,server)
库(闪亮)
图书馆(DT)

ui请不要发布具有非本机端口/主机配置的应用程序。这分散了对实际问题的注意力,可能会干扰防火墙设置(就像我所做的那样)。谢谢你的提醒
library(shiny)
library(DT)

ui <- fluidPage(
  mainPanel(
    fluidRow(
      column(12,DT::dataTableOutput(outputId = 'tableCurrencies'))
    ),
    actionButton(inputId = 'showSelectedButton',label = 'Show Selec'),
    fluidRow(uiOutput("myTabUI"))
  )
)

server <- function(input,output){
  output$tableCurrencies <- DT::renderDataTable({
    data.frame(a=rnorm(10),b=rnorm(10),c=rnorm(10))})     
  origTable_selected <- reactive({
    input$tableCurrencies_rows_selected        
  })      
  output$myTabUI <- renderUI({
    input$showSelectedButton
    myTabs <- lapply(isolate(origTable_selected()),function(i) {          
      tabName <- paste0("test",i)          
      a <- renderPlot({hist(rnorm(50))})
      output[[paste0(tabName,"rates")]] <- a
      return(tabPanel(
        tabName,
        fluidRow(column(6,plotOutput(paste0(tabName,"rates"))))
      ))
    })
    do.call(tabsetPanel,myTabs)
  })
}

shinyApp(ui,server)