R闪亮的问题-> gcIntermediate警告

问题描述 投票:1回答:1

我正在尝试创建一个交互式仪表板,允许用户选择一个机场,然后根据选择生成一个地图,以显示可以从选定机场飞到的所有目的地,并在地图上绘制路径。

到目前为止是我的代码:

#Load datasets

#Dataset 1: Routes
routes=read.csv(url("https://raw.githubusercontent.com/jpatokal/openflights/master/data/routes.dat"))
dim(routes)
#67662  9
str(routes)

#Dataset #2: Airports 
airports=read.csv(url("https://raw.githubusercontent.com/jpatokal/openflights/master/data/airports-extended.dat"))
dim(airports)
#12667 14

#Give Better Names to Columns

colnames(routes)=c("Airline","AirlineID","IATA","SourceAP_ID","DestinationAirport","DestAP_ID","Codeshare","Stops","Equipment")
colnames(airports)=c("AirportID","Name","City","Country","IATA","ICAO","Latitude","Longitude","Altitude","Timezone","DST","TzDatabaseTz","Type","Source")

#Join datasets on Source Airport
#-------------------------------#
#IATA in airports
#SourceAirport in routes (IATA)

fullair=merge(x=routes,y=airports,by="IATA",all.x=TRUE)
dim(routes)
#67662  9
dim(airports)
#12667  14
dim(fullair)
#67662  22


fullair2=subset(fullair,fullair$Type=="airport")
dim(fullair2)
#67467  22


#Clean up dataset
#install.packages("dplyr")
library(dplyr)

#Make a new unique ID by combining IATA and Destination Airport
fullair2$UniqueID=paste0(fullair2$IATA,"_",fullair2$DestinationAirport)
head(fullair2$UniqueID)
length(unique(fullair2$UniqueID))
#37445


#Create column that assigns number of unique routes to single airport
fullair3=fullair2 %>%
  group_by(IATA) %>%
  mutate(Count=n_distinct(UniqueID)) %>%
  ungroup()
fullair3=as.data.frame(fullair3)


#Get rid of duplicates
fullair3=fullair3[!duplicated(fullair3[c("UniqueID")]),]
dim(fullair3)
#37445    10

library(rowr)
library(sqldf)
library(RSQLite)

 #-------------------Grab Region and/or Country-------------------#

library(stringi)
fullair3$Region=stri_extract(fullair3$TzDatabaseTz, regex='[^/]*')

unique(fullair3$Region)
table(fullair3$Region)



#-----------Number of Routes from Destination------------#
SpitOutNum=sqldf("select IATA,count(*)
             from fullair3
             group by IATA")
SpitOutNum=as.data.frame(SpitOutNum)
colnames(SpitOutNum)=c("IATA","DestinationCount")
fullair3=merge(x=fullair3,y=SpitOutNum,by="IATA",all.x=TRUE)



#Create the full name
fullair3$NamePart1=paste("(",fullair3$IATA,")",sep ="")
fullair3$FullName=paste(fullair3$Name, fullair3$NamePart1)
fullair3$NamePart1=NULL

fullair3$Name2Part1=paste("(",fullair3$DestinationAirport,")",sep ="")
fullair3$DestFullName=paste(fullair3$DestAirportName, fullair3$Name2Part1)

#Make destination columns
SpitOutNum2=sqldf("select IATA, City, Country, Region, Name, DestinationCount, Longitude, Latitude
                  from fullair3
                  group by IATA,City, Country, Region, Name")

colnames(SpitOutNum2)=c("DestinationAirport","DestCity","DestCountry","DestRegion","DestAirportName","DestCount","DestLong","DestLat")
fullair3=merge(x=fullair3,y=SpitOutNum2,by="DestinationAirport",all.x=TRUE)

fullair3$Name2Part1=paste("(",fullair3$DestinationAirport,")",sep ="")
fullair3$DestFullName=paste(fullair3$DestAirportName, fullair3$Name2Part1)


#TABLE1 - Region
table1=sqldf("select Region, FullName as 'Airport Name', Country, City, count(*) as 'Number of Routes'
         from fullair3
         group by Region, FullName, Country, City
         order by count(*) desc")


#TABLE2 - Country
table2=sqldf("select Country, FullName as 'Airport Name', City, count(*) as 'Number of Routes'
         from fullair3
         group by Country, FullName, City
         order by count(*) desc")

 #TABLE3 - Destination
 table3=sqldf("select FullName, DestFullName as 'Airport Name', DestCountry as 'Country',DestCity as 'City', DestCount as 'Number of Routes'
         from fullair3
         group by FullName, DestFullName, DestCountry, DestCity
         order by DestCount desc")

 #TABLE 4 - ALL DATA
table4=sqldf("select FullName as 'Airport Name', Country, City, count(*) as 'Number of Routes'
         from fullair3
         group by FullName, Country, City
         order by count(*) desc")

#----------PART 2: SHINY DASHBOARD----------#

library(shinydashboard)
library(shiny)
library(leaflet)
library(leaflet.extras)
library(rgdal)
library(sp)
library(raster)
library(DT)
library(markdown)

airportchoices=unique(fullair3$FullName)


# Define UI for application
ui <- fluidPage(
  dashboardPage(
    dashboardHeader(title="Airport Accessibility Analysis"),
    dashboardSidebar(
      sidebarMenu(
        menuItem("All Data",
                 tabName = "AllData",
                 icon=icon("table")
        ),
        menuItem("Destination Maps",
          tabName = "DestMaps",
          icon=icon("plane-arrival")
      ))
    ),
    dashboardBody(
      tabItems(
        tabItem(
          tabName = "AllData",
          DTOutput("alldata") 
        ),
        tabItem(
          tabName = "DestMaps",
          fluidRow(column(4),
                   column(8, selectInput(inputId = "destselect",label="Select an airport:",choices=airportchoices)
                    )),
          DTOutput("destdata"),
          leafletOutput("dest_airports")
        )
      )
    )
  )
)
# Define server logic 
server <- function(input, output) {


#----------DESTINATION FILTERING---------#  

  AirportData=reactive({
    filteredData=subset(fullair3, FullName == input$destselect)
    return(filteredData)
  })

  AirportDataTable=reactive({
    filteredDataTable=subset(table3,FullName==input$destselect)
    filteredDataTable$FullName=NULL
    return(filteredDataTable)
  })

#----------ALL DATA TABLE----------#
output$alldata=renderDT({

datatable(table4,options=list(pageLength=10,
                          lengthMenu=c(10,15,20,25)
         ),rownames = FALSE)
  })



#-------------------DESTINATION PLOTS-------------------#



  output$destdata=renderDT({

    data_table = AirportDataTable()

    datatable(data_table,options=list(pageLength=5,
                                  lengthMenu=c(5,10,15,20)
    ),rownames = FALSE)
  })

  output$dest_airports=renderLeaflet({

    data=AirportData()

    pal=colorNumeric("Yellow",data$DestCount)


    curved.lines2 =
      gcIntermediate(
        p1 = as.matrix(x = data[,c("Longitude","Latitude")] ),
        p2 = as.matrix(x = data[,c("DestLong","DestLat")] ),
        breakAtDateLine = TRUE,
        n = 1000,
        addStartEnd = TRUE,
        sp = TRUE)

    leaflet(data=data) %>% 




      addTiles(group="Esri.WorldImagery")  %>%


      addProviderTiles(providers$Esri.WorldImagery,
                       options = tileOptions(minZoom =0, maxZoom = 6),
                       group = "Esri.WorldImagery") %>%

      addProviderTiles(providers$CartoDB.DarkMatter,
                       options = tileOptions(minZoom =0, maxZoom = 6),
                       group = "CartoDB.DarkMatter") %>%


      addCircleMarkers(lng = ~data$Longitude,
                       lat = ~data$Latitude,
                       radius = 2,
                       color = "red",
                       label = paste(data$FullName)) %>%

      addCircleMarkers(lng = data$DestLong,
                 lat = data$DestLat,
                 radius = ~data$DestCount/25, 
                 color="yellow",
                 weight = 1, 
                 popup = paste0("Airport Name: ", data$DestAirportName, "<br>",
                                "City: ", data$DestCity, "<br>",
                                "Destination Count: ",data$DestCount,"<br>"
                 ),
                 label = ~as.character(data$DestinationAirport),
                 group = "Points") %>%

      addPolylines( data = curved.lines2
                    , weight = 1 
      ) %>%

      addLayersControl(
        baseGroups = c("Esri.WorldImagery","CartoDB.DarkMatter"),
        options = layersControlOptions(collapsed = TRUE)
      )

  }) 
}

# Run the application 
shinyApp(ui = ui, server = server)

[每次运行此代码,都会得到一个仪表板来显示,就像我想要的那样,随着表格和地图的动态变化。但是,对于某些机场选择,我收到一条错误消息。例如,当我选择“ Es Senia Airport(ORN)”时,我只会得到一个没有地图的表格,以及一条错误消息,内容为“错误:缺少需要TRUE / FALSE的值”。

正在检查R控制台,我收到一条警告,内容为:

  Warning: Error in if: missing value where TRUE/FALSE needed
  97: .interm
  96: gcIntermediate
  95: func [/Users/myname/Desktop/FolderName/app.R#323]
  82: origRenderFunc
  81: output$dest_airports
   1: runApp

这是我的问题:

1。)我不明白为什么这适用于某些选择而不适用于其他选择>

2。)如何使用gcIntermediate解决此问题

有人可以帮我诊断我的代码有什么问题吗?我觉得我真的很接近,解决方案可能只是一件小事。任何帮助,将不胜感激!谢谢!

我正在尝试创建一个交互式仪表板,允许用户选择一个机场,然后根据选择生成地图,以显示一个人可以从选定的位置飞往所有目的地...

r shiny path leaflet dashboard
1个回答
0
投票

我想出来了:“目标过滤”部分中的某些数据子集没有被完全观察到。

© www.soinside.com 2019 - 2024. All rights reserved.