我有一个带有大量参数的应用程序。每个参数都有很多粒度,这使得找到所需的参数变得很痛苦。这使电抗部分不断地进行计算,从而减慢了速度。我添加了一个SubmitButton来解决上述问题,但随后又遇到了另一个问题。

下面是我构建的框架的简单复制。输入的参数从1到1000之间,代表我想要的 sample 。我想做的是能够执行上述操作,但也可以使用相同的参数集进行重采样。添加提交按钮后现在发生的事情是,除非我先单击“重新采样”然后单击“更新”按钮,否则它将使“重新采样”按钮无法使用。

有什么想法可以让它们分别工作?

shinyServer(function(input, output) {
  getY<-reactive({
    a<-input$goButton
    x<-rnorm(input$num)
    return(x)
  })

  output$temp <-renderPlot({
     plot(getY())
  }, height = 400, width = 400)
})

shinyUI(pageWithSidebar(
  headerPanel("Example"),
  sidebarPanel(
    sliderInput("num",
            "Number of Samples",
            min = 2,
            max = 1000,
            value = 100),
    actionButton("goButton", "Resample"),
    submitButton("Update View")
  ),
  mainPanel(
    tabsetPanel(
      tabPanel("Heatmap",
               plotOutput("temp")
      ),
      tabPanel("About"),
      id="tabs"
    )#tabsetPanel
  )#mainPane;
))

根据乔的答案进行编辑:
shinyServer(function(input, output) {
  getY<-reactive({

    isolate({a<-input$goButton
      x<-rnorm(input$num)
      return(x)})
  })

  output$temp <-renderPlot({
     b<-input$goButton1
     plot(getY())
  }, height = 400, width = 400)
})

shinyUI(pageWithSidebar(
  headerPanel("Example"),
  sidebarPanel(
    sliderInput("num",
            "Number of Samples",
            min = 2,
            max = 1000,
            value = 100),
    actionButton("goButton", "Resample"),
    actionButton("goButton1","Update View")
  ),
  mainPanel(
    tabsetPanel(
      tabPanel("Heatmap",
               plotOutput("temp")
      ),
      tabPanel("About"),
      id="tabs"
    )#tabsetPanel
  )#mainPane;
))

最佳答案

答案是乔·郑在上面的评论中给出的,但是由于发现OP难以理解,我在下面明确地写下来,以供记录:

# ui.R

library("shiny")
shinyUI(
  pageWithSidebar(
    headerPanel("Example")
    ,
    sidebarPanel(
      sliderInput("N", "Number of Samples", min = 2, max = 1000, value = 100)
      ,
      actionButton("action", "Resample")
    )
    ,
    mainPanel(
      tabsetPanel(
        tabPanel("Plot", plotOutput("plotSample"))
        ,
        id = "tabs1"
      )
    )
  )
)

# server.R

library("shiny")
shinyServer(
  function(input, output, session) {
    Data <- reactive({
        input$action
        isolate({
            return(rnorm(input$N))
            return(x)
        })
    })
  output$plotSample <-renderPlot({
      plot(Data())
    } , height = 400, width = 400
  )
})

请注意,在reactact()中具有input $ action,其中“action”是actionButton的inputID,足以触发新的图形渲染。因此,您只需要一个actionButton。

关于r - Shiny 的 react 性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17703711/

10-12 17:35