java.lang.ArrayIndexOutOfBoundsException error when calling accessibility
phily5051 opened this issue · 6 comments
I am trying to calculate accessibility for for a medium size number of points in Montreal using walk and transit but ran into the following error: java.util.concurrent.ExecutionException: java.lang.ArrayIndexOutOfBoundsException
1106 out of 2522 origins processed.
2455 out of 2522 origins processed.
Before I updated the Java SE Development Kit 11 to 21, it calculated accessibility for both modes, but now it is not working. I've included a subset of points and the files that should reproduce the error.
Data files:
# assign more RAM to java
options(java.parameters = "-Xmx12G")
# essential packages
library(r5r)
library(accessibility)
library(sf)
library(data.table)
library(ggplot2)
library(interp)
library(h3jsr)
library(dplyr)
# build network dataset
r5r_core <- setup_r5(data_path = 'data/Montreal/')
# setting up the modes for general transit access
mode <- c("WALK", "TRANSIT")
max_walk_time <- 30
travel_time_cutoff <- 30
departure_datetime <- as.POSIXct("12-04-2023 08:00:00", format = "%d-%m-%Y %H:%M:%S")
time_window <- 30
percentiles <- 50
# data points
orgpoints <- fread(file.path("data/Montreal/PopGrid1km.csv"))
destpoints <- fread(file.path("data/Montreal/POI.csv"))
# accessibility
access <- accessibility(r5r_core,
origins = orgpoints,
destinations = destpoints,
mode = mode,
opportunities_colnames = c("supermarket"),
decay_function = "step",
cutoffs = travel_time_cutoff,
departure_datetime = departure_datetime,
max_walk_time = max_walk_time,
time_window = time_window,
percentiles = percentiles,
progress = TRUE)
The output and the error messages are as follows:
Warning in assign_points_input(origins, "origins") :
'origins$id' forcefully cast to character.
Warning in assign_points_input(destinations, "destinations") :
'destinations$id' forcefully cast to character.
621 out of 2522 origins processed.Error in .jcall("RJavaTools", "Ljava/lang/Object;", "invokeMethod", cl, :
java.util.concurrent.ExecutionException: java.lang.ArrayIndexOutOfBoundsException
624 out of 2522 origins processed.
2455 out of 2522 origins processed.
No error occurs when I use mode <- "WALK"
. Any opinion will be much appreciated.
Could you please run r5r::r5r_sitrep()
and share the output below ?
Hello, @rafapereirabr.
I ran r5r::r5r_sitrep()
and the below is the output:
$r5r_package_version
[1] ‘2.0’
$r5_jar_version
[1] "7.1"
$java_version
[1] "21.0.4"
$set_memory
[1] "-Xmx12G"
$session_info
R version 4.4.1 (2024-06-14 ucrt)
Platform: x86_64-w64-mingw32/x64
Running under: Windows 10 x64 (build 19045)
Matrix products: default
locale:
[1] LC_COLLATE=Korean_Korea.utf8 LC_CTYPE=Korean_Korea.utf8
[3] LC_MONETARY=Korean_Korea.utf8 LC_NUMERIC=C
[5] LC_TIME=Korean_Korea.utf8
time zone: Europe/London
tzcode source: internal
attached base packages:
[1] stats graphics grDevices utils datasets methods
[7] base
other attached packages:
[1] dplyr_1.1.4 h3jsr_1.3.1 interp_1.1-6
[4] ggplot2_3.5.1 data.table_1.15.4 sf_1.0-16
[7] accessibility_1.4.0 r5r_2.0 rJava_1.0-11
loaded via a namespace (and not attached):
[1] utf8_1.2.4 generics_0.1.3 tidyr_1.3.1
[4] class_7.3-22 KernSmooth_2.23-24 digest_0.6.36
[7] magrittr_2.0.3 evaluate_0.24.0 grid_4.4.1
[10] fastmap_1.2.0 jsonlite_1.8.8 backports_1.5.0
[13] e1071_1.7-14 DBI_1.2.3 purrr_1.0.2
[16] fansi_1.0.6 scales_1.3.0 Rdpack_2.6
[19] cli_3.6.3 rlang_1.1.4 units_0.8-5
[22] rbibutils_2.2.16 bit64_4.0.5 munsell_0.5.1
[25] withr_3.0.0 yaml_2.3.9 tools_4.4.1
[28] deldir_2.0-4 checkmate_2.3.1 colorspace_2.1-0
[31] geojsonsf_2.0.3 curl_5.2.1 vctrs_0.6.5
[34] R6_2.5.1 proxy_0.4-27 lifecycle_1.0.4
[37] classInt_0.4-10 bit_4.0.5 V8_4.4.2
[40] pkgconfig_2.0.3 pillar_1.9.0 gtable_0.3.5
[43] glue_1.7.0 Rcpp_1.0.12 xfun_0.45
[46] tibble_3.2.1 tidyselect_1.2.1 rstudioapi_0.16.0
[49] knitr_1.48 htmltools_0.5.8.1 rmarkdown_2.27
[52] compiler_4.4.1
Thanks, @phily5051 . I was able to reproduce the error. It only occurs when using "TRANSIT"
as a transportation mode. The code works fine for walking trips, for example.
This leads me to think the error is not in r5r
but in the GTFS data. I would strongly suggest you check for any issues in the transit data using the GTFS validator available in the {gtfstools} package..
Once the issue in the GTFS is fixed, you will need to build the network again setting overwrite = TRUE
.
r5r_core <- setup_r5(data_path = 'data/Montreal/', overwrite = TRUE)
@rafapereirabr is there a way to get rJava to print a full traceback for these Java exceptions? That would make debugging a lot easier.
@mattwigway , yes it is possible to traceback Java exceptions with {rJava}
. See this SO a Q&A. We use this in the setup_r5()
function already (see here). I've looked into the accessibility()
and travel_time_matrix()
functions but I didn't find a way to implement this there.
If we can't do it on the r side we should be able to catch it on the Java side, print the traceback, and then re-throw so that R knows it failed