8

我有一个包含大量参数的应用程序。每个参数都有很多粒度,这使得找到所需的参数变得很痛苦。这会导致反应部分不断计算哪个会减慢速度。我添加了一个 submitButton 解决了上述问题,但随后又遇到了另一个问题。

下面是我构建的框架的简单复制。参数输入接受一个从 1 到 1000 的数字,表示我想要的样本。我想做的是能够在上面做,但也能够用相同的参数集重新采样。添加提交按钮后现在发生的事情是它使重新采样按钮无法操作,除非我先单击重新采样,然后再单击更新按钮。

有什么让他们分开工作的想法吗?

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;   
))
4

2 回答 2

9

Joe Cheng 在上面的评论中给出了答案,但看到 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
  )
})

请注意,在 reactive() 中包含 input$action,其中“action”是 actionButton 的 inputID,足以触发绘图的新渲染。所以你只需要一个actionButton。

于 2014-01-03T21:08:59.347 回答
4
  • 更改 getY 以便除第一行之外的所有内容都包含在 isolate({ ... }) 中
  • 将 submitButton 更改为 actionButton
  • 在 renderPlot 内添加一行以读取新的 actionButton
于 2013-07-18T14:29:42.423 回答