diff --git a/shiny/testHipFlipCoin/server.R b/shiny/testHipFlipCoin/server.R index bbf142a8b74a4aaa77d0042d403a026c08017357..3198ab425c916ca72852e671eeab1f2c74e74224 100644 --- a/shiny/testHipFlipCoin/server.R +++ b/shiny/testHipFlipCoin/server.R @@ -13,7 +13,6 @@ moeda <- function(n){ } ## Vetor vazio. -x <- integer() N <- 1000 shinyServer( @@ -22,52 +21,57 @@ shinyServer( output$header <- renderPrint({ template("TEMA") }) - # cara <- eventReactive(input$goCara, { - # x <<- c(x, 1L) - # }) - # coro <- eventReactive(input$goCoro, { - # x <<- c(x, 0L) - # }) - # output$nlanc <- renderText({ - # coro(); cara() - # return(length(x)) - # }) - cara <- reactive({ - input$goCara - x <<- c(x, 1L) + + ## Cria valores para reagirem à estímulos dos buttons + v <- reactiveValues(x = integer()) + + ## Responde a estímulos no `input$goCara`. + observeEvent(input$goCara, { + v$x <- c(v$x, 1L) }) - coro <- reactive({ - input$goCoro - x <<- c(x, 0L) + + ## Responde a estímulos no `input$goCoro`. + observeEvent(input$goCoro, { + v$x <- c(v$x, 0L) + }) + + ## Responde a estímulos no `input$goCoro`. + observeEvent(input$clear, { + v$x <- integer() }) + ## x começa com dois elementos. Descontá-los. output$nlanc <- renderText({ - coro(); cara() - return(length(x)-2) + return(length(v$x)) }) + process <- eventReactive(input$goProcess, { - x <- x[-c(1:2)] - ## Número de lançamentos. - n <- length(x) - ## Número de caras. - k <- sum(x) - ## Número de trocas de face. - o <- sum(abs(diff(x))) - ## Faz várias execuções do experimento aleatório. - r <- replicate(N, moeda(n)) - ## P-valor bilateral empírico. - p <- min(c(2*min(c(sum(r<=o), sum(r>=o)))/N, 1)) - ## Lista com todos os elementos. - return(list(n=n, k=k, o=o, r=r, p=p, x=x)) + with(reactiveValuesToList(v), { + x <- x + ## Número de lançamentos. + n <- length(x) + ## Número de caras. + k <- sum(x) + ## Número de trocas de face. + o <- sum(abs(diff(x))) + ## Faz várias execuções do experimento aleatório. + r <- replicate(N, moeda(n)) + ## P-valor bilateral empírico. + p <- min(c(2*min(c(sum(r<=o), sum(r>=o)))/N, 1)) + ## Lista com todos os elementos. + list(n=n, k=k, o=o, r=r, p=p, x=x) + }) }) + output$seqx <- renderText({ s <- paste0(process()$x, collapse="") return(s) }) + output$hist <- renderPlot({ with(process(),{ - if(n<=9){ - stop("Pro favor, lance no mínimo 30 vezes.") + if(n<=15){ + stop("Pro favor, lance no mínimo 15 vezes.") } par(mar=c(5,4,3,2), family="Palatino") layout(matrix(c(1,2,1,3), 2, 2)) diff --git a/shiny/testHipFlipCoin/ui.R b/shiny/testHipFlipCoin/ui.R index be8f9903b8c77fd55dc5ed2e4cdebb8384d4714e..2bb75159aed75f1e27c209750b928bff4be961d4 100644 --- a/shiny/testHipFlipCoin/ui.R +++ b/shiny/testHipFlipCoin/ui.R @@ -17,6 +17,7 @@ shinyUI( h4("Você consegue imitar uma moeda?"), p(txt), hr(), + sidebarPanel( helpText("Clique nos botões para declarar cara ou coroa."), actionButton("goCara", "Cara"), @@ -24,10 +25,14 @@ shinyUI( h6("Número de lançamentos feitos:"), verbatimTextOutput("nlanc"), actionButton("goProcess", "Aplicar teste de hipótese!"), + actionButton("clear", "Recomeçar"), h6("Sequência das faces observadas (1=cara, 0=coroa):"), verbatimTextOutput("seqx"), - checkboxInput("teorico", "Valores teóricos: Binomial(n-1, p=0.5)") + checkboxInput( + "teorico", "Valores teóricos: Binomial(n-1, p=0.5)") ), + + mainPanel( plotOutput("hist", width=500, height=500) )