空的SpatialPolygonsDataFrame对象已通过,并且将在Shiny中跳过
问题描述:
对于繁琐的代码,我很抱歉,但需要一些很好的帮助。空的SpatialPolygonsDataFrame对象已通过,并且将在Shiny中跳过
我将从printscreens
所以开始,5出的6个过滤器在我闪亮的应用程序的工作完美:
的问题出现了,当我尝试创建第六过滤器 - 所谓指示灯。 并呈现与三个最后一个过滤器相同的数据和格式。基本上我想结合指标过滤前三个指标。并通过三个指标之一来过滤所有7个项目的圈子(基于一个指标)。是否有意义?
但最后的代码不起作用。它让我错误
警告在polygonData.SpatialPolygonsDataFrame(数据):通过 空SpatialPolygonsDataFrame对象,并会被跳过
不幸的是,我没有找到太多了。你可以看看代码的末尾,叫指标,并帮助。我怀疑我至少在正确的数据子集方面存在问题。
数据可以采取here
形状文件可以采取here
所以,代码本身
# Projects and Results Dashboard
# Packages (I played with different)
library(shiny)
library(shinythemes)
library(leaflet)
library(rgdal)
library(tidyverse)
library(geojsonio)
library(RColorBrewer)
library(highcharter)
library(plotly)
library(ggplot2)
library(xlsx)
# Set directory
setwd("C:~/App Projects and Results")
# Read csv, which was created specifically for this app
projects <- read.csv("Sample data3.csv", header = TRUE)
names(projects)
# Read a shapefile
countries <- readOGR(".","ne_50m_admin_0_countries")
# Merge data
projects.df <- merge(countries, projects, by.x = "name", by.y = "Country")
class(projects.df)
# UI code
ui <- shinyUI(fluidPage(theme = shinytheme("united"),
titlePanel(HTML(# "<h1><center><font size=14>
"Projects and Results Dashboard"
#</font></center></h1>"
)),
sidebarLayout(
sidebarPanel(
selectInput("countryInput", "Country",
choices = c("Choose country", "Senegal",
"Nigeria",
"Cameroon",
"Dem. Rep. Congo",
"Rwanda",
"Tanzania",
"Madagascar"),
selected = "Choose country"),
selectInput("projectInput", "Project",
choices = c("Choose Project",
"Project 1",
"Project 2",
"Project 3",
"Project 4",
"Project 5",
"Project 6",
"Project 7"),
selected = "Choose Project"),
selectInput("totalInput", "Total Funds",
choices = c("Choose Project",
"Project 1",
"Project 2",
"Project 3",
"Project 4",
"Project 5",
"Project 6",
"Project 7"),
selected = "Choose Project"),
selectInput("cashInput", "Client Cash",
choices = c("Choose Project",
"Project 1",
"Project 2",
"Project 3",
"Project 4",
"Project 5",
"Project 6",
"Project 7"),
selected = "Choose Project"),
selectInput("clientInput", "Total Client",
choices = c("Choose Project",
"Project 1",
"Project 2",
"Project 3",
"Project 4",
"Project 5",
"Project 6",
"Project 7"),
selected = "Choose Project"),
selectInput("indicatorInput", "Indicator",
choices = c("Choose indicator",
"Total Funds ",
"Client Cash",
"Total Client"
),
selected = "Choose indicator")
),
mainPanel(leafletOutput(outputId = 'map', height = 800)
)
)
))
# SERVER
server <- shinyServer(function(input, output) {
output$map <- renderLeaflet({
leaflet(projects.df) %>%
addProviderTiles(providers$Stamen.TonerLite) %>%
setView(11.0670977,0.912484, zoom = 4)
})
# observers
# selected country
selectedCountry <- reactive({
projects.df[projects.df$name == input$countryInput, ]
})
observe({
state_popup <- paste0("<strong>Country: </strong>",
selectedCountry()$name,
"<br><strong> Project: </strong>",
selectedCountry()$Project,
"<br><strong> Total Funds: </strong>",
selectedCountry()$Total.Funds,
"<br><strong>Client Cash: </strong>",
selectedCountry()$Client.Cash,
"<br><strong>Total Client: </strong>",
selectedCountry()$Total.Client)
leafletProxy("map", data = selectedCountry()) %>%
clearShapes() %>%
addPolygons(fillColor = "blue",
popup = state_popup,
color = "#BDBDC3",
fillOpacity = 0.5,
weight = 1
)
})
# selected project
selectedProject <- reactive({
tmp4 <- projects.df[!is.na(projects.df$Project),]
tmp4[tmp4$Project == input$projectInput, ]
})
observe({
state_popup4 <- paste0("<strong>Country: </strong>",
selectedProject()$name,
"<br><strong> Project: </strong>",
selectedProject()$Project,
"<br><strong> Total Funds: </strong>",
selectedProject()$Total.Funds,
"<br><strong>Client Cash: </strong>",
selectedProject()$Client.Cash,
"<br><strong>Total Client: </strong>",
selectedProject()$Total.Client)
leafletProxy("map", data = selectedProject()) %>%
clearShapes() %>%
addPolygons(fillColor = "blue",
popup = state_popup4,
color = "#BDBDC3",
fillOpacity = 0.5,
weight = 1
)
})
# Total Funds
selectedTotal <- reactive({
tmp <- projects.df[!is.na(projects.df$Project),]
tmp[tmp$Project == input$totalInput, ]
})
observe({
state_popup1 <- paste0("<strong>Country: </strong>",
selectedTotal()$name,
"<br><strong> Project: </strong>",
selectedTotal()$Project,
"<br><strong> Total Funds </strong>",
selectedTotal()$Total.Funds)
leafletProxy("map", data = selectedTotal()) %>%
clearShapes() %>%
addCircles(lng = ~selectedTotal()$long, lat = ~selectedTotal()$lat,
weight = 1, fillOpacity = 0.5, color = "darkorange",
radius = ~Total.Funds*500, popup = state_popup1
)
})
# Cash Funds
selectedCash <- reactive({
tmp1 <- projects.df[!is.na(projects.df$Project),]
tmp1[tmp1$Project == input$cashInput, ]
})
observe({
state_popup2 <- paste0("<strong>Country: </strong>",
selectedCash()$name,
"<br><strong>Project: </strong>",
selectedCash()$Project,
"<br><strong>Client Cash: </strong>",
selectedCash()$Client.Cash)
leafletProxy("map", data = selectedCash()) %>%
clearShapes() %>%
addCircles(lng = ~selectedCash()$long, lat = ~selectedCash()$lat, weight =
1, fillOpacity = 0.5, color = "darkred",
radius = ~Client.Cash*500, popup = state_popup2)
})
# Total Client
selectedClient <- reactive({
tmp2 <- projects.df[!is.na(projects.df$Project),]
tmp2[tmp2$Project == input$clientInput, ]
})
observe({
state_popup3 <- paste0("<strong>Country: </strong>",
selectedClient()$name,
"<br><strong>Project: </strong>",
selectedClient()$Project,
"<br><strong>Total Client: </strong>",
selectedClient()$Total.Client)
leafletProxy("map", data = selectedClient()) %>%
clearShapes() %>%
addCircles(lng = ~selectedClient()$long, lat = ~selectedClient()$lat,
weight = 1, fillOpacity = 0.5, color = "darkgreen",
radius = ~Total.Client*500, popup = state_popup3)
})
# Indicator
selectedIndicator <- reactive({
tmp5 <- projects.df[!is.na(projects.df$Project),]
tmp5[tmp5$Total.Funds == input$indicatorInput | tmp5$Client.Cash ==
input$indicatorInput | tmp5$Total.Client == input$indicatorInput, ]
})
observe({
state_popup5 <- paste0("<strong>Country: </strong>",
selectedIndicator()$name,
"<br><strong>Project: </strong>",
selectedIndicator()$Project,
"<br><strong> Total Funds: </strong>",
selectedIndicator()$Total.Funds,
"<br><strong>Client Cash: </strong>",
selectedIndicator()$Client.Cash,
"<br><strong>Total Client: </strong>",
selectedIndicator()$Total.Client
)
leafletProxy("map", data = selectedIndicator()) %>%
clearShapes() %>%
addCircles(lng = ~selectedIndicator()$long, lat =
~selectedIndicator()$lat, weight = 1, fillOpacity = 0.5, color =
"darkorange",
radius = ~Total.Client*500, popup = state_popup5)***
})
})
shinyApp(ui = ui, server = server)
答
有R社会的帮助下解决。
最后一个过滤器将使用此代码。
# Indicator
selectedIndicator <- reactive({switch(input$indicatorInput,
"Total Funds " = projects.df$Total.Funds,
"Client Cash" = projects.df$Client.Cash,
"Total Client" = projects.df$Total.Client)
})
observe({
state_popup5 <- paste0("<strong>Country: </strong>",
projects.df$name,
"<br><strong>Project: </strong>",
projects.df$Project,
"<br><strong> Total Funds: </strong>",
projects.df$Total.Funds,
"<br><strong>Client Cash: </strong>",
projects.df$Client.Cash,
"<br><strong>Total Client: </strong>",
projects.df$Total.Client
)
leafletProxy("map", data = projects.df) %>%
clearShapes() %>%
addCircles(lng = projects.df$long, lat =
projects.df$lat, weight = 1, fillOpacity = 0.5, color =
"darkorange",
radius = ~selectedIndicator()*500, popup = state_popup5)
})
结果: