2017-10-16 5 views
0

나는 우리 카운티의 특정 특성에 대한 정보가있는 플롯 맵을 생성하는 반짝이는 앱을 가지고 있습니다. 응용 프로그램이 잘 작동하지만 내가 전화 할 때마다지도를 만들기 위해서는 40 초가 걸립니다. 나는 전처리를하기 위해 if와 else를 가진 반응식 (rt2)을 사용한다. 어떤 종류의 병렬 처리를하거나 시간을 절약하기 위해 이런 일을하는 방법이 있는가? 데이터 세트의반짝이는 앱으로 병렬 처리

샘플

County_ID County_Name  EQI air_EQI water_EQI land_EQI sociod_EQI 
     <int>  <chr>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl> 
1  1001 Autauga, AL 0.0041379 0.9553846 -1.1097280 -0.7065906 0.6704357 
2  1003 Baldwin, AL 0.2002343 0.7179643 -0.5659107 -1.0842990 0.5530728 
3  1005 Barbour, AL -0.9506388 0.1310074 -0.9780902 -1.2814700 -1.2362940 
4  1007 Bibb, AL -1.0889200 0.0652890 -0.9681726 -0.8274103 -0.6000178 
5  1009 Blount, AL -0.5139221 0.4021944 -0.7186447 -0.6229339 0.2965088 
6  1011 Bullock, AL -2.0828290 -0.3091858 -1.4513350 -1.2580140 -1.8239700 

ui.r 나는 예를 재현 할 수 없기 때문에

library(plotly) 
library(shiny) 
library(tidyr) 
library(maps) 
library(shinydashboard) 
library(viridis) 
library(ggplot2) 

ui <- navbarPage(
    title="Computational Modelling and Investigation of Neuropsychiatric Disease (MIND)", 
    tabPanel("Home Tab", 
      sidebarLayout(
      sidebarPanel(

       uiOutput("selectcol11"), 
       uiOutput("selectsol11") 
      ), 
      mainPanel(plotlyOutput("plot2"))))) 

server.r

server <- function(input, output) { 

output$selectcol11<-renderUI({ 
     selectInput("selectcol11","Select Measure",choices = c("EQI","air_EQI","water_EQI", 
                    "land_EQI","sociod_EQI","built_EQI","good_days","bad_days"),selected = "EQI") 
     }) 
output$selectsol11<- renderUI({ 
      sliderInput("selectsol11", "Select Resolution", 
         min = 2, max = 7, value = 5,step =1)}) 


      rt2 <- reactive({ 
       if(input$selectcol11== "EQI"){ 
       foo <- cbind(data.frame(do.call('rbind', strsplit(as.character(df$County_Name),',',fixed=TRUE))),df[,c(1,3:10)]) 
       colnames(foo)[1] <- "County" 
       colnames(foo)[2] <- "State" 

       foo1 <- map_data("county") 

       eqi1 <- foo %>% 
        group_by(County) %>% 
        summarise(EQI = sum(EQI)) 
       eqi10 <- foo %>% 
        group_by(County) %>% 
        summarise(County_ID = sum(County_ID)) 
       eqi<- cbind(eqi1,eqi10[,2]) 
       eqi$County <- tolower(eqi$County) # matching string 
       foo1_eqi <- merge(foo1, eqi, by.x = "subregion", by.y = "County") 
       foo1_eqi 
       final.plot1<-foo1_eqi[order(foo1_eqi$order), ] 
       final.plot1$County_Name_ID <- with(final.plot1, paste("County:",subregion, '<br>', "County_ID:", County_ID)) 
       final.plot1 
       } 
       else if(input$selectcol11== "air_EQI"){ 
        foo <- cbind(data.frame(do.call('rbind', strsplit(as.character(df$County_Name),',',fixed=TRUE))),df[,c(1,3:10)]) 
        colnames(foo)[1] <- "County" 
        colnames(foo)[2] <- "State" 

        foo1 <- map_data("county") 

        eqi1 <- foo %>% 
        group_by(County) %>% 
        summarise(air_EQI = sum(air_EQI)) 
        eqi10 <- foo %>% 
        group_by(County) %>% 
        summarise(County_ID = sum(County_ID)) 
        eqi<- cbind(eqi1,eqi10[,2]) 
        eqi$County <- tolower(eqi$County) # matching string 
        foo1_eqi <- merge(foo1, eqi, by.x = "subregion", by.y = "County") 
        foo1_eqi 
        final.plot1<-foo1_eqi[order(foo1_eqi$order), ] 
        final.plot1$County_Name_ID <- with(final.plot1, paste("County:",subregion, '<br>', "County_ID:", County_ID)) 
        final.plot1 
       } 
      }) 

      output$plot2 <- renderPlotly ({ 
       p<- ggplot(rt2(), aes(x = long, y = lat, group=group,text=County_Name_ID,fill = cut_number(rt2()[,7],input$selectsol11))) 
       p<- p+ geom_polygon(colour=alpha("black", 1/2)) 
       p<- p+coord_equal() 
       p<- p+ viridis::scale_fill_viridis(discrete = TRUE) 
       p<- p+ scale_fill_discrete("Measure Density") 
       ggplotly(p, tooltip = c("County_Name_ID")) 
       }) 
      } 
+0

예제 데이터 세트로 더 큰 데이터 세트를 복제하려고 시도했지만 쉽지 않습니다. 제 환경에서는 매우 빠르지 만, 일부 플롯은 나타나지 않고'fill = cut_number (rt2() [, 7], 입력 $ selectsol11)'오류가 발생했기 때문에 제거되었습니다. 게다가, 어떤 것들은 이상하게 보입니다. : 왜 당신의'sliderInput'이 당신의'server'에 있고 같은 ID를 가지고 있습니까? –

+0

예문은 유감스럽게도 제공 할 수없는 특정 데이터 집합에서만 작동합니다. 내 서버에 uioutput을 원할 때 슬라이더가 있습니다. 이 작품은 걱정하지 않아도됩니다. 어떻게하면 더 빨리 작동하게 할 수 있을지 궁금합니다. –

+0

모든 코드를 복사하여 붙여 넣는 것이 아니라 최소한의 재생 가능한 예제를 제공해야합니다. –

답변

0

, 나는 앱에 시간이 걸리는 것을 알 수 . 그래서 응용 프로그램을 실행하는 동안 당신은 몇 가지 프로파일 링을 수행하는 제안 : 사용할 수있는 도구 Rstudio에서 직접이 -

-> 응용 프로그램 실행 "프로파일 링을 시작"다음

-> "프로파일 링 중지" 앱이로드되었을 때

이로부터 가장 많은 시간 (또는 메모리)을 차지하는 부분을 확인할 수 있습니다. 당신이 보여준 바에 따르면, 대부분의 계산 시간이 걸리는 것은 foo1 <- map_data("county")이라고 제안 할 것입니다. 따라서이 경우에이 기능을 빠르게하거나 다른 기능을 찾는 방법을 찾아야합니다. map_data()의 경우 병렬 처리를 구현하는 것이 적절하지 않다고 생각합니다.