使用闪亮的按钮创建多个图形

时间:2017-12-29 10:56:24

标签: r shiny

我有以下闪亮的脚本

 library(shiny)

ui <- fluidPage(
  actionButton("go", "Go"),
  #This should trigger a default 100 hist
  actionButton("go", "Go"),
  numericInput("n", "n", 50),
  plotOutput("plot")
)

server <- function(input, output) {

  randomVals <- eventReactive(input$go, {
    runif(input$n)
  })

  randomVals2 <- eventReactive(input$go, {
    runif(n = 100)
  })

  output$plot <- renderPlot({
    hist(randomVals())
  })
  output$plot2 <- renderPlot({
    hist(randomVals2())
  })
}

shinyApp(ui, server)

这为我提供了一个按钮,我可以按下来获得直方图。它工作正常。但是,我还想在它旁边添加另一个按钮,它给出一个默认n = 100的直方图(仅用于学习目的)。

但是第二个按钮似乎不起作用。

有关应该更改什么以触发它的任何想法?

2 个答案:

答案 0 :(得分:1)

@PorkChop已正确指出代码中的一个错误,即两个按钮的重复ID。此外,您的UI功能中没有定义plot2

但是,我想评论所定义的功能有点多余。原则上,两个按钮应该具有相同的功能(生成随机数据并绘制其直方图),具有不同的尺寸参数。

最好的方法是定义一个功能,完成所需的全部功能,并使用每个按钮的特定参数调用它:

library(shiny)

ui <- fluidPage(
  actionButton("go_hist", "Go"),
  actionButton("go_hist_100", "Go with 100"), #This should trigger a default 100 hist
  numericInput("n", "n", 50),
  plotOutput("plot")
)

server <- function(input, output) {
  plotHist = function(size){
    randomData = runif(size)
    output$plot = renderPlot(hist(randomData, main = paste("n =", size)))
  }
  observeEvent(input$go_hist, plotHist(input$n))
  observeEvent(input$go_hist_100, plotHist(100))
}

shinyApp(ui, server)

通过这种功能化,您的代码将更易于阅读,调试和维护。

答案 1 :(得分:0)

你不能有多个具有相同ID的按钮,请更改按钮名称

  actionButton("go", "Go"),
  #This should trigger a default 100 hist
  actionButton("go1", "Go"),