library(seoulsubway)
library(data.table)
load(file="1804_ver/subway_route_1812.RData")
data("subway_route")
subway_route_1812 <- list()
seoul_route <- station_name_list # vectro format statino_nms

for(i in 1:nrow(seoul_route)){
  for(j in i:nrow(seoul_route)){
    subway_route_1812[[paste0(seoul_route[i], "-",seoul_route[j])]] <-
      tryCatch(get_path(depart=seoul_route[i,]$Name, arrival=seoul_route[j,]$Name),
                       error = function(e) {c("no result",0)
                                 })
  }
  if(i %in% c(10*(1:25),length(seoul_route))){
    #save(file="D:/subway_analysis/data/subway_route2.RData",subway_route2, seoul_route)
    save(file="../data/subway_route_1812.RData", subway_route_1812)
  }
}
get_path<- function(depart, arrival){
result <- subway_route_1812[[paste0(depart, "-", arrival)]]

if(result$Time==300){
  Path <- "no result"
  ind <- 0
  result$Info <- data.frame(matrix(0,5,5))
}
if(result$Time!=300 & nrow(result$Info)==1){
  Path <- result$Path
  Path <- Path$Name
}
if(result$Time!=300 & nrow(result$Info)==2){
  Path <- rbind(result$Path1, result$Path2)
  Path <- Path[-which(duplicated(Path$Name)),]$Name
}
if(result$Time!=300 & nrow(result$Info)==3){
  Path <- rbind(result$Path1, result$Path2, result$Path3)
  Path <- Path[-which(duplicated(Path$Name)),]$Name
}
if(result$Time!=300 & nrow(result$Info)==4){
  Path <- rbind(result$Path1, result$Path2, result$Path3, result$Path4)
  Path <- Path[-which(duplicated(Path$Name)),]$Name
}
return(data.frame(station=Path))
}

change_ds_sna <- function(input){
  n <- nrow(input)
  if(n!=1){
  dat <- data.frame(matrix(0,n-1,2))
  colnames(dat) <- c("from","to")
  for(i in 1:(n-1)){
    dat[i,] <- c(as.character(input$station[i]),
                 as.character(input$station[i+1]))
  }
  }
  if(n==1){
    dat <- data.frame("from"=input$station, "to"=input$station)
  }
  return(dat)
}

index_name <- names(subway_route_1812)

result <- get_path(str_split(index_name[1], pattern="-")[[1]][1],
                   str_split(index_name[1], pattern="-")[[1]][2])
change_ds_sna(result)

subway_route_1812_handle <- list()
for(i in 1:length(index_name)){
  depart <- str_split(index_name[i], pattern="-")[[1]][1]
  arrival <- str_split(index_name[i], pattern="-")[[1]][2]
  result <- get_path(depart, arrival)
  raw_result <- subway_route_1812[[paste0(depart, "-", arrival)]]
  subway_route_1812_handle[[paste0(depart, "-", arrival)]]$Time <- raw_result$Time
  subway_route_1812_handle[[paste0(depart, "-", arrival)]]$Count <- raw_result$Count
  subway_route_1812_handle[[paste0(depart, "-", arrival)]]$Path <- change_ds_sna(result)  
}
for(i in 1:length(index_name)){
  depart <- str_split(index_name[i], pattern="-")[[1]][1]
  arrival <- str_split(index_name[i], pattern="-")[[1]][2]
  raw_result <- subway_route_1812[[paste0(depart, "-", arrival)]]
  subway_route_1812_handle[[paste0(depart, "-", arrival)]]$Time <- raw_result$Time
  subway_route_1812_handle[[paste0(depart, "-", arrival)]]$Count <- raw_result$Count
}

index<-c()
for(i in 1:length(subway_route_1812)){
  index[i] <- subway_route_1812_handle[[i]]$Time
}

index_null <- index[index=="no result"]
index_name[index_null]
i <- 1
for(i in 1:6){
depart <- str_split(index_name[index_null][i], pattern="-")[[1]][1]
arrival <- str_split(index_name[index_null][i], pattern="-")[[1]][2]
result_i <- subway_route[[paste0(depart, "-", arrival)]]
result_i <- data.frame(station=result_i[which(!duplicated(result_i$station)),])
subway_route_1812_handle[[paste0(depart, "-", arrival)]]$Time <- c(58, 68, 64, 54, 58, 56)[i]
subway_route_1812_handle[[paste0(depart, "-", arrival)]]$Count <- c(24, 18, 17, 15, 17, 16)[i]
subway_route_1812_handle[[paste0(depart, "-", arrival)]]$Path  <- change_ds_sna(result_i)
}

subway_route_1812_handle
get_shortestpath <- function(depart, arrival){
  data(subway_route_1812_handle)
  result <- subway_route_1812_handle[[paste0(depart, "-", arrival)]]$Path
  if(is.null(result)){
    result_inv <- subway_route_1812_handle[[paste0(arrival, "-", depart)]]$Path
    ord_f <- result_inv$from
    result_inv$from <- result_inv$to
    result_inv$to <- ord_f
    dat_inv_change <- result_inv
    for(i in 1:nrow(dat_inv_change)){
      dat_inv_change[i,] <- result_inv[(nrow(result_inv)+1-i),]
    }
    result_inv <- dat_inv_change
    result <- result_inv
  }
  result
}


#save(file="data/subway_route_1812_handle.RData", subway_route_1812_handle)


king4k1/seoulsubway documentation built on Nov. 18, 2019, 3:38 p.m.