2017-05-11 3 views
0

いくつかの統計分布から異なるサンプルを生成するためにshinyappを作成しようとしています。私のアプリには、ディストリビューションを指定するためのスイッチが含まれており、パラメータの入力が表示されます。光沢のある異なる分布からサンプルを生成する

何も入手できません。これはui.Rです:

library(shiny) 

shinyUI(fluidPage(

    # Application title 
    titlePanel("Sampling"), 

    # Sidebar with a slider input for number of bins 
    sidebarLayout(
    sidebarPanel(

     selectInput("popDistX", "X", 
        list("Normal" = "normal", 
         "Beta" = "beta", 
         "Gamma" = "gamma", 
         "Weibull" = "weibull" 
       ) 
    ), 

     numericInput("nX", 
        "Tamaño muestral X:", 
        min = 1, 
        max = 400, 
        value = 2), 


     conditionalPanel(
     condition = "input.popDistX == 'beta'", 
     sliderInput("shape1", "Forma 1: ", min=0.1, max=10, value=1, step=0.05), 
     sliderInput("shape2", "Forma 2: ", min=0.1, max=10, value=1, step=0.05) 
    ), 

     conditionalPanel(
     condition = "input.popDistX == 'gamma'", 
     sliderInput("shape", "Forma: ", min=0.1, max=10, value=1, step=0.05), 
     sliderInput("scale", "Escala: ", min=0.1, max=10, value=1, step=0.05) 
    ), 

     conditionalPanel(
     condition = "input.popDistX == 'weibull'", 
     sliderInput("shape", "Forma: ", min=0.1, max=10, value=1, step=0.05), 
     sliderInput("scale", "Escala: ", min=0.1, max=10, value=1, step=0.05) 
    ), 

     conditionalPanel(
     condition = "input.popDistX == 'normal'", 
     sliderInput("mean", "Media: ", min=0, max=400, value=0), 
     sliderInput("sd", "Desviación típica: ", min=0.1, max=20, value=1, step=.1) 
    ) 
    ), 

    # Show a plot of the generated distribution 
    mainPanel(
     plotOutput("histogram") 
    ) 
) 
)) 

そしてserver.R:

library(shiny) 

shinyServer(function(input, output) { 

    DistX <- reactive(function() input$popDistX) 

    nX <- reactive(function() input$nX) 

    paramsX <- reactive(function() { 
    switch(DistX(), 
      "normal" = list(mean=input$mean, sd=ainput$sd), 
      "beta" = list(shape1=input$shape1, shape2=input$shape2), 
      "gamma" = list(shape=input$shape, scale=input$scale), 
      "weibull" = list(shape=input$shape, scale=input$scale) 
    )}) 

    rdistX <- reactive(function() { 
    switch(DistX(), 
      "normal" = "rnorm", 
      "beta" = "rbeta", 
      "gamma" = "rgamma", 
      "weibull" = "rweibull" 
    )}) 


    sampleDistX <- reactive(function() 
     do.call(rdistX(), list(nX(), paramsX())) 
) 

    output$n <- renderPlot({ 
    hist(sampleDistX()) 
    }) 

}) 

してください、任意のヘルプ?それは重要で、どこにエラーがあるのか​​分かりません...

ありがとうございます。 フリオ

答えて

1

すべてのこれらのスイッチは、私には少し不必要なようです。あなたはただ1つの反応の中にそれらをすべて入れることができます。このようにアプリを単純化する必要があります(あなたの望むものを引き続き提供します):

library(shiny) 
server <- function(input, output, session) { 
    myDist <- reactive({ 
    if(input$popDistX == "normal"){ 
     rnorm(input$nX, input$mean, input$sd) 

    } else if(input$popDistX == "beta"){ 
     rbeta(input$nX, input$shape1, input$shape2) 

    } else if(input$popDistX == "gamma"){ 
     rgamma(input$nX, input$shape, input$scale) 

    } else if(input$popDistX == "weibull"){ 
     rweibull(input$nX, input$shape, input$scale) 

    } 
    }) 

    output$histogram <- renderPlot({ 
    hist(myDist()) 
    }) 

} 

ui <- fluidPage(

    # Application title 
    titlePanel("Sampling"), 

    # Sidebar with a slider input for number of bins 
    sidebarLayout(
    sidebarPanel(

     selectInput("popDistX", "X", 
        list("Normal" = "normal", 
         "Beta" = "beta", 
         "Gamma" = "gamma", 
         "Weibull" = "weibull" 
       ) 
    ), 

     numericInput("nX", 
        "Tamaño muestral X:", 
        min = 1, 
        max = 400, 
        value = 2), 


     conditionalPanel(
     condition = "input.popDistX == 'beta'", 
     sliderInput("shape1", "Forma 1: ", min=0.1, max=10, value=1, step=0.05), 
     sliderInput("shape2", "Forma 2: ", min=0.1, max=10, value=1, step=0.05) 
    ), 

     conditionalPanel(
     condition = "input.popDistX == 'gamma'", 
     sliderInput("shape", "Forma: ", min=0.1, max=10, value=1, step=0.05), 
     sliderInput("scale", "Escala: ", min=0.1, max=10, value=1, step=0.05) 
    ), 

     conditionalPanel(
     condition = "input.popDistX == 'weibull'", 
     sliderInput("shape", "Forma: ", min=0.1, max=10, value=1, step=0.05), 
     sliderInput("scale", "Escala: ", min=0.1, max=10, value=1, step=0.05) 
    ), 

     conditionalPanel(
     condition = "input.popDistX == 'normal'", 
     sliderInput("mean", "Media: ", min=0, max=400, value=0), 
     sliderInput("sd", "Desviación típica: ", min=0.1, max=20, value=1, step=.1) 
    ) 
    ), 

    # Show a plot of the generated distribution 
    mainPanel(
     plotOutput("histogram") 
    ) 
) 
) 

shinyApp(ui = ui, server = server, options = list(launch.browser = T)) 
+0

ありがとうございます!このようにして、理解しやすくなります!本当にありがとう!! – user3149230

1

あり1ではありませんが、複数のエラー:

まず、いくつかのタイプミス:"histogram"の代わりに、"n"(またはoutput$nの代わりoutput$histogramご希望の場合)。 inputの代わりにainputがあります。

もっと問題がある:なぜ関数をreactive()に渡して式を直接渡さないのですか?

これらのマイナーな修正では、次のコードは動作するはずです:

library(shiny) 

ui <- fluidPage(
    # Application title 
    titlePanel("Sampling"), 
    # Sidebar with a slider input for number of bins 
    sidebarLayout(
    sidebarPanel(
     selectInput("popDistX", "X", 
        list("Normal" = "normal", 
         "Beta" = "beta", 
         "Gamma" = "gamma", 
         "Weibull" = "weibull" 
       ) 
    ), 
     numericInput("nX", 
        "Tamaño muestral X:", 
        min = 1, 
        max = 400, 
        value = 2), 
     conditionalPanel(
     condition = "input.popDistX == 'beta'", 
     sliderInput("shape1", "Forma 1: ", min=0.1, max=10, value=1, step=0.05), 
     sliderInput("shape2", "Forma 2: ", min=0.1, max=10, value=1, step=0.05) 
    ), 
     conditionalPanel(
     condition = "input.popDistX == 'gamma'", 
     sliderInput("shape", "Forma: ", min=0.1, max=10, value=1, step=0.05), 
     sliderInput("scale", "Escala: ", min=0.1, max=10, value=1, step=0.05) 
    ), 
     conditionalPanel(
     condition = "input.popDistX == 'weibull'", 
     sliderInput("shape", "Forma: ", min=0.1, max=10, value=1, step=0.05), 
     sliderInput("scale", "Escala: ", min=0.1, max=10, value=1, step=0.05) 
    ), 
     conditionalPanel(
     condition = "input.popDistX == 'normal'", 
     sliderInput("mean", "Media: ", min=0, max=400, value=0), 
     sliderInput("sd", "Desviación típica: ", min=0.1, max=20, value=1, step=.1) 
    ) 
    ), 
    # Show a plot of the generated distribution 
    mainPanel(
     plotOutput("n") 
    ) 
) 
) 

server <- function(input, output) { 
    DistX <- reactive(input$popDistX) 
    nX <- reactive(input$nX) 
    paramsX <- reactive( { 
    switch(DistX(), 
      "normal" = list(mean=input$mean, sd=input$sd), 
      "beta" = list(shape1=input$shape1, shape2=input$shape2), 
      "gamma" = list(shape=input$shape, scale=input$scale), 
      "weibull" = list(shape=input$shape, scale=input$scale) 
    )}) 
    rdistX <- reactive( { 
    switch(DistX(), 
      "normal" = "rnorm", 
      "beta" = "rbeta", 
      "gamma" = "rgamma", 
      "weibull" = "rweibull" 
    )}) 
    sampleDistX <- reactive( 
    do.call(rdistX(), c(nX(), paramsX())) 
) 
    output$n <- renderPlot({ 
    hist(sampleDistX()) 
    }) 
} 

shinyApp(ui = ui, server = server) 
+0

はい!どうもありがとうございました!!!これらの発言は非常に有用でした! – user3149230

関連する問題