2017-03-22 7 views
0

나는 poisson 분포에서 샘플링하는 Shiny 앱을 작성했습니다. 필자는 데이터의 플롯이나 요약을 출력 할 때마다 함수를 다시 작성했습니다. 차라리 함수를 한 번 사용한 다음 모든 플롯 및 요약에 함수가 호출 된 단일 시간을 참조하게하십시오. 그렇지 않으면 출력간에 결과가 동일하지 않습니다. 함수를 한 번 호출하고 결과를 ggplot에서 사용할 변수로 저장하려고하면 ggplot이 반응적인 데이터를 사용할 수없고 데이터 프레임으로 변환 할 수 없다는 오류가 발생합니다. ggplot 입력을 사용하지 수 있기 때문에, 반짝이는 앱에서 같은 절차를 여러 번 반복하지 않는 방법

mydata <- reactive({ 
    x <- input$x 
    y <- input$y 
    z <- input$z 
    Muts <- as.data.frame(rpois(100,(x*y*z))) 
    Muts 
}) 

그러나 그들은 작동하지 않았다 :

나는의 변화를 시도했다. 나는 반응 기능을 올바르게 사용하지 않을 것이라고 생각합니다. 코드의 중복성을 줄이고 플롯 및 요약이 모두 동일한 단일 기본 데이터를 사용하는지 확인하는 데 도움이된다면 많은 도움이됩니다. 미리 감사드립니다.

내 현재 코드 :

server.R

library(shiny) 
library(ggplot2) 

# Define server logic required to draw a histogram 
function(input, output) { 




    output$distPlot <- renderPlot({ 

    x <- input$x 
    y <- input$y 
    z <- input$z 
    Muts <- as.data.frame(rpois(100,(x*y*z))) 


    # draw the density plot 

    ggplot(Muts, aes(Muts)) + geom_density() 

    }) 

    output$distPlot2 <-renderPlot({ 

    x <- input$x 
    y <- input$y 
    z <- input$z 
    Muts <- as.data.frame(rpois(100,(x*y*z))) 



    Muts <- as.data.frame(Muts) 

    ggplot(Muts, aes(Muts)) + geom_histogram() 

    }) 

    output$summary <- renderPrint({ 
    x <- input$x 
    y <- input$y 
    z <- input$z 
    Muts <- as.data.frame(rpois(100,(x*y*z))) 

    summary(Muts) 
    }) 


} 
+0

'ggplot' 호출에서 반응식을 호출 할 필요가 있습니다. 'ggplot (myData(), aes (...)) + ...' – SymbolixAU

+0

도 참조하십시오 [이 답변] (0120) 15305108 – SymbolixAU

답변

1

당신의 생각은 옳았다과 코드 아래로 일하고 :

library(shiny) 
library(ggplot2) 

# Define UI for application that draws a histogram 
ui <- fluidPage(

    # Application title 
    titlePanel(""), 

    # Sidebar with a slider input for number of bins 
    sidebarLayout(
     sidebarPanel(
     sliderInput("x", 
        "Number of bins:", 
        min = 1, 
        max = 50, 
        value = 30), 
     sliderInput("y", 
        "Number of bins:", 
        min = 1, 
        max = 50, 
        value = 30), 
     sliderInput("z", 
        "Number of bins:", 
        min = 1, 
        max = 50, 
        value = 30) 
    ), 

     # Show a plot of the generated distribution 
     mainPanel(
     plotOutput("distPlot"), 
     plotOutput("distPlot2"), 
     verbatimTextOutput("summary") 
    ) 
    ) 
) 

# Define slibrary(shiny) 


# Define server logic required to draw a histogram 
server <- function(input, output) { 

    mydata <- reactive({ 
    x <- input$x 
    y <- input$y 
    z <- input$z 
    Muts <- as.data.frame(rpois(100,(x*y*z))) 
    Muts 
    }) 


    output$distPlot <- renderPlot({ 
    Muts <- mydata() 
    ggplot(Muts, aes(Muts)) + geom_density() 
    }) 

    output$distPlot2 <-renderPlot({ 
    Muts <- mydata() 
    ggplot(Muts, aes(Muts)) + geom_histogram() 
    }) 

    output$summary <- renderPrint({ 
    Muts <- mydata() 
    summary(Muts) 
    }) 


} 

# Run the application 
shinyApp(ui = ui, server = server) 
+0

고맙습니다. 내가 Rstudio GUI를 사용하여 응용 프로그램을 실행하고 콘솔에서 시작할 수 있도록 'shinyApp (ui = ui, server = server)'부분이 있습니까? – user964689

+0

app.R이 끝나면 그 내용을 쓸 수 있습니다. RStudio는 "Run/Source"를 "Run App"으로 대체합니다. 그 이유는 반짝 이는 응용 프로그램에서 작업하고 있음을 알고 있기 때문입니다. app.R에 추가하지 않으면, 모든 것을 소스화할 수 있고'shinyApp (ui, server)'와 함께 콘솔을 사용하여 앱을 시작할 수 있습니다. – shosaco

1

것은 그냥 실제로 얻을 mydata()를 호출해야합니다 반응하는 물체의 가치.

library(shiny) 
library(ggplot2) 


ui <- fluidPage(
numericInput("x", "x", 2), numericInput("y", "y", 2), numericInput("z", "z", 2), 
plotOutput("distPlot"), plotOutput("distPlot2")) 

server <- function(input, output) { 

    mydata <- reactive({ 
    x <- input$x 
    y <- input$y 
    z <- input$z 
    data.frame(x=rpois(100,(x*y*z))) 
    }) 


    output$distPlot <- renderPlot({ 

    ggplot(mydata(), aes(x)) + geom_density() 

    }) 

    output$distPlot2 <-renderPlot({ 

    ggplot(mydata(), aes(x)) + geom_density() 

    }) 
} 

runApp(list(ui=ui, server=server))