Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 使用一个操作按钮更新不同选项卡面板中的绘图_R_Shiny - Fatal编程技术网

R 使用一个操作按钮更新不同选项卡面板中的绘图

R 使用一个操作按钮更新不同选项卡面板中的绘图,r,shiny,R,Shiny,在我正在构建的一个更大的应用程序中,我需要使用一个操作按钮更新不同选项卡面板中的多个绘图 现在,按下“操作”按钮后的绘图更新工作正常。 但是,如果我回到前面的tabPanel,我希望使用dataNorm或dataUnif中的缓存值仍然能够更新绘图的标题 情况: 单击“转到”以查看统一历史记录 更新Unif历史标题 转到绘图选项卡面板 单击“转到”以查看正常历史记录 更新规范历史标题 返回plotUnif选项卡面板(不要单击go!) 尝试更新标题 任何帮助都将不胜感激!!:) 下面是示例: lib

在我正在构建的一个更大的应用程序中,我需要使用一个操作按钮更新不同选项卡面板中的多个绘图

现在,按下“操作”按钮后的绘图更新工作正常。 但是,如果我回到前面的tabPanel,我希望使用dataNorm或dataUnif中的缓存值仍然能够更新绘图的标题

情况:

  • 单击“转到”以查看统一历史记录
  • 更新Unif历史标题
  • 转到绘图选项卡面板
  • 单击“转到”以查看正常历史记录
  • 更新规范历史标题
  • 返回plotUnif选项卡面板(不要单击go!)
  • 尝试更新标题
  • 任何帮助都将不胜感激!!:)

    下面是示例:

    library(shiny)
    
    ui <- fluidPage(
        sidebarLayout(
            sidebarPanel(
                tabsetPanel(id = "tabset",
                            tabPanel("plotUnif",
                                     numericInput("unifCount", "Count", 100),
                                     sliderInput("unifRange", "Range", min = -100, max = 100, value = c(-10, 10)),
                                     textInput(inputId = 'titleUnif', "Change Title"),
                                     plotOutput("plotUnif")
                            ),
                            tabPanel("plotNorm",
                                     numericInput("normCount", "Count", 100),
                                     numericInput("normMean", "Mean", 0),
                                     numericInput("normSd", "Std Dev", 1),
                                     textInput(inputId = 'titleNorm', "Change Title"),
                                     plotOutput("plotNorm")
                            )
                ),
                actionButton("go", "Plot")
            ),
            mainPanel(
                "Bla"
            )
        )
    )
    
    server <- function(input, output){
        
        # Record how many times go has been pushed
        v <- reactiveValues(go_rec = 0L)
        
        # Compute new dataUnif only if input$go in new and on that tab (wanted effect: otherwise return cached value)
        dataUnif <- eventReactive(input$go,{
            shiny::req(input$go > v$go_rec, input$tabset == "plotUnif", cancelOutput = T)
            
            v$go_rec <- input$go
            return(runif(input$unifCount, input$unifRange[1], input$unifRange[2]))
        })
        
        # same as dataUnif
        dataNorm <- eventReactive(input$go,{
            shiny::req(input$go > v$go_rec, input$tabset == "plotNorm", cancelOutput = T)
            
            v$go_rec <- input$go
            return(rnorm(input$normCount, input$normMean, input$normSd))
        })
        
        # Disply hist (be able to change title)
        output$plotUnif <- renderPlot({
            shiny::req(dataUnif())
            hist(dataUnif(), main = input$titleUnif)
        })
        
        output$plotNorm <- renderPlot({
            shiny::req(dataNorm())
            hist(dataNorm(), main = input$titleNorm)
        })
    }
    
    shinyApp(ui, server)
    
    库(闪亮)
    
    ui要在不点击
    action按钮的情况下刷新标题图,需要在绘制一次图后取消阻止
    req
    。解决方案是将其状态保存在
    reactiveValues

    #记录推送go的次数以及一次绘制的绘图
    
    v您应该看看
    {shinny}
    提供的
    update*
    函数,例如
    shinny::updateTextInput()
    不幸的是,添加标题只是一个例子。在更复杂的应用程序中,dataUnif/dataNorm和renderPlot语句之间会发生各种反应性计算和子集设置。好的,但是有许多
    update*
    函数。很难想象将这些更新放在
    observe
    环境中不起作用。谢谢HubertL,这确实有效。只是现在runif和rnorm仍然可以计算,即使我更改了计数或参数。(在我的真实场景中,这两个计算表示非常昂贵的comp)。我想实现一种在计数或参数不变的情况下使用缓存值的方法,同时仍然更新过滤器(或更改示例中的标题),在每个面板中放置一个操作按钮可能更容易