앱이 시작될 때 트리거되는 observeEvent
의 앱이 있는데 버튼을 클릭 할 때까지 기다리지 않습니다. 이 예제에서는 차이가없는 것처럼 보이지만 실제 앱에서는 busyIndicator가 초기로드에서 두 번 표시됩니다. SEND는 { "중": "사용 중"} 보내기 { "중": "유휴"}앱 실행시 반짝이는 observeEvent 트리거
name<-sample(c('a','b','c'),replace=T,5)
LAT<-runif(5,min=-26, max=-22)
LONG<-runif(5,min=-54, max=-48)
data<-data.frame(name,LAT,LONG)
ui <- shinyUI(fluidPage(
selectInput('muni',label='Select city',
choices=c('Show all',sort(levels(data$name)),selected=NULL)),
htmlOutput('box'),
leafletOutput('map')
))
server <- function (input, output, session) {
data1<-reactive({
if (input$muni!='Show all') {
data<-data[which(data$name==input$muni),]
}
return(data)
})
output$box <- renderUI({
data<-data1()
num<-as.integer(nrow(data))
lapply(1:num, function(i) {
bt <- paste0('go_btn',i)
fluidRow(
HTML(paste0('<div style="border: 1px solid #00000026;
border-radius: 10px; padding: 10px;">
<span style="font-size:14px font-weight:bold;">',
data$name[i],' - areas: a1, a2, a3</span></br>',
actionButton(bt,'See map',icon=icon('map-marker',lib='font-awesome')),
HTML('</div></br>')
)))
})
})
output$map<-renderLeaflet({
data<-data1()
rownames(data)<-seq(1:nrow(data))
leaflet(data) %>%
addProviderTiles("Esri.WorldTopoMap") %>%
setView(-51.5,-24.8,zoom=7) %>%
addMarkers(lng=~data$LONG,lat=~data$LAT)
})
lapply(1:nrow(data), function(i) {
observeEvent(input[[paste0('go_btn',i)]], {
data<-data1()
rownames(data)<-seq(1:nrow(data))
leafletProxy('map',data=data,session=session) %>%
clearMarkers() %>%
setView(data$LONG[i],data$LAT[i],zoom=15) %>%
addMarkers(lng=data$LONG[i],lat=data$LAT[i])
},ignoreInit = T)
})
}
shinyApp(ui, server)
내가 프로세스가 두 번 실행되는 것을 볼 수 options(shiny.trace = TRUE)
사용. 누군가 내 앱이이 동작을하는 이유를 말할 수 있습니까? 난 내 자신을 만들 수 있도록
재현 가능한 예를 게시 할 수 있습니까? 코드에는 실행되지 못하게하는 몇 가지 문제가 있습니다. –
죄송합니다! 데이터 프레임에서 일부 변수를 삭제하고 선언하지 않은 것을 잊었습니다! 이제 나는 그것이 효과가 있다고 생각합니다 ... –