У меня есть проблема, которую я пытался решить безуспешно в течение семи часов. По сути, я пытаюсь визуализировать данные об аэропорте и рейсах с openflights.org. Предполагалось, что это будет простая, простая визуализация, но она превратилась в настоящий волосатик.
Все работает до l oop. Когда я пытаюсь запустить для l oop, чтобы изобразить траектории полета на моей карте, он работает немного, и на карте появляются некоторые линии, но затем он выходит с ошибкой: Error in if (antipodal(p1, p2)) { : missing value where TRUE/FALSE needed
Что я пытался сделать, чтобы это исправить: Как видите, я просмотрел набор данных и удалил все некорректные записи. Например, были некоторые идентификаторы "\\ N", и поэтому я полностью удалил эти записи. Затем я попытался изменить идентификаторы на числа, а не на строки, просто чтобы посмотреть, что произойдет.
Это всегда выдает ошибку примерно в одно и то же время после того, как я запускаю для l oop, есть ли способ, которым я могу просмотреть строку, до которой дошла ошибка? Я тоже новичок R.
Я знаю, что подобный вопрос задавался ранее, но ни одно из решений, которые они там имели, не работало для меня. Спасибо за любую помощь, которую вы можете предоставить.
Код:
library('geosphere')
library('maps')
# Reading in the files from openflights.org
airports <- read.csv("airports.dat.txt", header=FALSE, col.names=c("Airport ID","Name","City","Country","IATA","ICAO","Latitude","Longitude",
"Altitude","Timezone","DST", "TZ Database","Type","Source"), as.is=TRUE)
flights <- read.csv("routes.dat.txt", header=FALSE, col.names=c("Airline","Airline ID","Source Airport","Source Airport ID","Destination Airport",
"Destination Airport ID","Codeshare","Stops","Equipment"), as.is=TRUE)
# Cleaning the data set, there are some instances of the value "\\N" in the flights data set.
flights <- flights[!grepl("\\N", flights$Source.Airport.ID),]
flights <- flights[!grepl("\\N", flights$Destination.Airport.ID),]
# Converting all of the IDs to numbers (I thought this might work but it did not)
flights$Source.Airport.ID <- as.numeric(flights$Source.Airport.ID)
flights$Destination.Airport.ID <- as.numeric(flights$Destination.Airport.ID)
airports$Airport.ID <- as.numeric(airports$Airport.ID)
# Creating a world background
map("world", col="white", border="gray10", fill=TRUE, bg="gray30")
# Adding all of the airports as points
points(x=airports$Longitude, y=airports$Latitude, pch=19,
cex=0.05, col="blue")
# Generating a color set to be used for mapping the flight paths
col.1 <- adjustcolor("limegreen", alpha=0.05)
col.2 <- adjustcolor("darkgreen", alpha=0.05)
edge.pal <- colorRampPalette(c(col.1, col.2), alpha = TRUE)
edge.col <- edge.pal(100)
# Now, generating the visualization of the flight paths.
# Here is where the error occurs, when I run this.
# It gets through some of the data but then errors out.
for(i in 1:nrow(flights)) {
node1 <- airports[airports$Airport.ID == flights[i,]$Source.Airport.ID,]
node2 <- airports[airports$Airport.ID == flights[i,]$Destination.Airport.ID,]
arc <- gcIntermediate( c(as.numeric(node1[1,]$Longitude), as.numeric(node1[1,]$Latitude)),
c(as.numeric(node2[1,]$Longitude), as.numeric(node2[1,]$Latitude)),
n=1000, addStartEnd=TRUE)
#edge.ind <- round(100*table(flights[i,]$Source.Airport.ID) / table(max(airports$Airport.ID)))
#lines(arc, col=edge.col[edge.ind], lwd=edge.ind/30)
lines(arc, col = "limegreen", lwd = 0.02)
}