나는 우리 카운티의 특정 특성에 대한 정보가있는 플롯 맵을 생성하는 반짝이는 앱을 가지고 있습니다. 응용 프로그램이 잘 작동하지만 내가 전화 할 때마다지도를 만들기 위해서는 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"))
})
}
예제 데이터 세트로 더 큰 데이터 세트를 복제하려고 시도했지만 쉽지 않습니다. 제 환경에서는 매우 빠르지 만, 일부 플롯은 나타나지 않고'fill = cut_number (rt2() [, 7], 입력 $ selectsol11)'오류가 발생했기 때문에 제거되었습니다. 게다가, 어떤 것들은 이상하게 보입니다. : 왜 당신의'sliderInput'이 당신의'server'에 있고 같은 ID를 가지고 있습니까? –
예문은 유감스럽게도 제공 할 수없는 특정 데이터 집합에서만 작동합니다. 내 서버에 uioutput을 원할 때 슬라이더가 있습니다. 이 작품은 걱정하지 않아도됩니다. 어떻게하면 더 빨리 작동하게 할 수 있을지 궁금합니다. –
모든 코드를 복사하여 붙여 넣는 것이 아니라 최소한의 재생 가능한 예제를 제공해야합니다. –