我有一个数据框如下
d <- data.frame(number = 1:4,
date = c(1600, 1700, 1800, 1900),
T_name = c("name1", "name2", "name3", "name4"))
我一直试图让我的地图对选择输入作出反应,但它不起作用。下面的代码使用适当的下拉列表加载应用程序,地图会出现,但是当我从列表中选择某些内容时,传单地图不会做出反应。
谁能看到我在这里可能出错的地方?
UI代码
library(shiny)
library(leaflet)
ui <- fluidPage("name_of_map",
sidebarLayout(
sidebarPanel(
selectInput(inputId = "input1", label = "Name of Filter" ,choices =
unique(d$T_name)),
selectizeInput(inputId = "year", label = "Year of Event",
choices = unique(d$date))
),
mainPanel(
leafletOutput("mymap"))
)
)
服务器代码
server <- function(input, output) {
output$mymap <- renderLeaflet({
leaflet(data = d[1:25,]) %>% addTiles() %>%
addProviderTiles(providers$Esri.NatGeoWorldMap) %>%
addMarkers(lng=~longitude, lat=~latitude,
popup = ~paste(mname, "<br>", "Date:", date,
"<br>", "Number of casualties:",
casualties,"<a href=",d$web,">",d$web, main=input$input1)
)
})
}
reactive <- reactive({d})
shinyApp(ui, server)
答案 0 :(得分:1)
您的示例中缺少一些输入变量,尤其是坐标(长/纬),mname,web,偶然性。随着您的构造,应用程序永远不会改变,因为无效值总是选择数据框d,但它从不按名称或年份过滤数据。所以你必须调整你的反应功能。在这里,我按名称或按年过滤。其中一个条件必须是真的。
我稍微改变了你的代码,所以至少它对其他人来说是可以重现的,并且我在你的服务器功能中移动了你的反应。
d <- data.frame(number = 1:4,
date = c(1600, 1700, 1800, 1900),
longitude = runif(4, 13,18),
latitude = runif(4, 40, 55),
web= rep("www.whatever.com", 4),
T_name = c("name1", "name2", "name3", "name4"))
library(shiny)
library(leaflet)
ui <- {fluidPage("name_of_map",
sidebarLayout(
sidebarPanel(
selectInput(inputId = "input1", label = "Name of Filter" ,choices =
unique(d$T_name)),
selectizeInput(inputId = "year", label = "Year of Event",
choices = unique(d$date))
),
mainPanel(
leafletOutput("mymap"))
)
)}
server <- function(input, output) {
react <- reactive({
req(input$input1)
req(input$year)
df <- d[d$T_name == input$input1 | d$date == input$year,]
df
})
output$mymap <- renderLeaflet({
req(input$input1)
leaflet() %>% addTiles() %>%
addProviderTiles(providers$Esri.NatGeoWorldMap) %>%
addMarkers(lng=react()$longitude, lat=react()$latitude,
popup = paste("mname", "<br>", "Date:", react()$date,
"<br>", "Number of casualties:",
"casualties", "<a href=", react()$web, ">", main=input$input1)
)
})
}
shinyApp(ui, server)