2015-07-21 49 views
1

我是新来的闪亮和做简单闪亮的应用程序,它产生iid正常变量和打印直方图。 输入有:闪亮生成随机值,每次按下按钮

  • 2 numericInput字段,mu和sigma
  • ActionButton

输出是tabsetPanel:

  • TAB1:5个生成的值
  • TAB2:直方图

所以它不起作用。我尝试了很多变体,只有不充分的工作解决方案是这样的。

这里是代码ui.R

library(shiny) 
library(xtable) 

meanInput1 <- numericInput("id1", "$$mean \\ of \\ x_1$$", 1, min = -10, max = 10, step = 1) 
meanInput2 <- numericInput("id2", "$$sd \\ of \\ x_2$$", 1, min = -10, max = 10, step = 1) 
tabPanel1 <- tabPanel("generated values", tableOutput("table1")) 
tabPanel2 <- tabPanel("Plot", plotOutput("plot1")) 

shinyUI(fluidPage(
    withMathJax(), 
    titlePanel("title"), 

    sidebarLayout(
     fluid=TRUE, 

     sidebarPanel(
      meanInput1, 
      meanInput2, 
      actionButton("goButton", "Go!") 
     ), 
    mainPanel(

     tabsetPanel(
      tabPanel1, 
      tabPanel2 
     ) 
    ) 
))) 

这里是代码server.R

shinyServer(
    function(input, output) { 

     output$plot1 <- renderPlot({ 
      if (input$goButton >= 1){ 
       sigma <- input$id2 
       muInput <- input$id1 

       table <- as.data.frame(rnorm(n = 5,muInput,sd = sigma)) 
       names(table) <- "x" 

       output$plot1 <- renderPlot(hist(table)); 
       output$table1 <- renderTable(head(table)); 
      } 
     }) 
    } 
) 

问题:

  • 只有buttonClicked 一次和tabPanel2选择它的工作原理。每次点击一个按钮时如何使它工作。

回答

0

在这种情况下,您希望使用eventReactive。你可以找到使用actionButtonhere的演示。您的代码在渲染语句中使用渲染语句的结构也有些奇怪。

如果您创建eventReactive函数并分离出您的renderTablerenderPlot调用它更清晰并正常工作。为了清楚起见,不要将变量命名为函数,因此我将table变量更改为my_table也是一种很好的做法。

shinyServer(
    function(input, output) { 

    rand <- eventReactive(input$goButton,{ 
     sigma <- input$id2 
     muInput <- input$id1 

     my_table <- as.data.frame(rnorm(n = 5,muInput,sd = sigma)) 
     names(my_table) <- "x" 
     return(my_table) 
    }) 

    output$plot1 <- renderPlot({ 
     my_table <- rand() 
     if(is.null(my_table)){ 
     return(NULL) 
     }else{ 
     hist(head(my_table$x)); 
     } 
    }) 


    output$table1 <- renderTable({ 
     my_table <- rand() 

     if(is.null(my_table)){ 
     return(NULL) 
     }else{ 
     my_table 
     } 
    }); 
    } 
)