Я работаю над блестящим приложением, в котором карта буклета анимируется во времени, но вы можете приостановить ее, а затем использовать слайдер, чтобы посмотреть на определенные годы. Я сделал фиктивную версию функциональности и разместил его здесь: https://seth127.shinyapps.io/sliderБлестящее приложение с лифтом: uiOutput не отображается до тех пор, пока не будет нажата кнопка goButton.
Мой вопрос, то sliderInput выбрать год (который находится внутри renderUI в server.R) не появится, пока вы не имеете сначала щелкнул goButton (который приостанавливает анимацию). Я не могу понять, почему.
Я хочу, чтобы он был по умолчанию до 2000 года (при вводе $ animate == 0). Я добавил текстовый ввод, чтобы проверить, что эта функция должна работать, и она работает для renderText, но не для renderUI. Буду признателен за любую оказанную помощь. Код ниже:
server.R
require(maps)
require(leaflet)
require(shiny)
fakeData <- data.frame(year=seq(1974,2014,by=1),
lat=seq(34, 40, by=0.1463415),
long=seq(-118,-73, by=1.097561),
artist="fake",
album="fake",
hometown="fake",
chart="PJ")
pickYear <- function(year, data) {
yearCities <- data[as.numeric(data$year)==year, ]
yearCities
}
shinyServer(
function(input, output) {
#refresh animation every 60 seconds
getit <- reactive({
invalidateLater(60000, session=NULL)
Sys.time()
})
#change animation year every 2 seconds
year <- reactive({
if(input$animate %% 2 != 0) {
invalidateLater(2000, session=NULL)
1984 + (round(as.numeric(Sys.time() - getit())/2))
} else {1984 + (round(as.numeric(Sys.time() - getit())/2))}
})
output$pressedGo <- reactive({if(input$animate==0) {"you haven't pressed go"} else {"now you have"}})
output$reactiveSlider <- renderUI({
yearVal <- if(input$animate == 0) {2000} else {year()}
sliderInput('year', label='Pick A Year:', value = yearVal,
min = 1984, max = 2015, step = 1, sep="")
})
output$map <- renderLeaflet({
leaflet(data = pickYear(input$year, fakeData)) %>% addTiles() %>%
addMarkers(~long, ~lat) %>% setView(-97.887318, 40.422487, 4)
})
})
ui.R
require(maps)
require(leaflet)
require(shiny)
shinyUI(
pageWithSidebar(
# Application title
headerPanel(
""
),
sidebarPanel(
),
mainPanel(
uiOutput("reactiveSlider"),
actionButton('animate', "Animate/Pause Map"),
h3(textOutput("pressedGo")),
p(" "),
leafletOutput("map")
)
)
)
довольно странно, кажется, что есть некоторый конфликт имен. Если вы переименуете 'reactiveSlider' в то, что не начинается с 'r', оно работает. – jenesaisquoi