I have a function that does some spatial calculations using
sf tools. I'm using
purrr::map_df to pass this function to each row of an
sfc tibble with around 7,000 rows. (Each row is a polygon (sfg)).
If I run the
map "manually" at the console prompt, it works fine, but it does take about 2 hours to return its eventual output.
So I have tried running it as an RStudio job.
When I do this, I get the error
Input must be a vector, not a
Something doesn't like having to work with a tibble that has a geometry column/attributes?
This error looks like it is connected to this issue, related to
vctrs. But I don't understand why I am only getting the error when I run it as a job.
It's exactly the same code, copied and pasted from the R script I'm working in to a separate script for the job. I'm running the job with a copy of the local environment, which I need to do as it contains the large-ish geo data objects I need my function to iterate over.
Any ideas please?
sf version 0.9-7,
tibble 3.1.0 and
Here's the script of the job:
library(dplyr) library(purrr) msoa_pcon_lookup <- msoa_bounds %>% slice_sample(n = 5) %>% # for testing (error occurs without this line too) split(.$msoa11cd) %>% map_df(~ scan_local_constituencies(., msoa_centroids, pcon_bounds))
and here's the backtrace:
Backtrace: x 1. +-global::sourceWithProgress(...) 2. | \-base::eval(statements[[idx]], envir = sourceEnv) 3. | \-base::eval(statements[[idx]], envir = sourceEnv) 4. | \-`%>%`(...) 5. +-purrr::map_df(...) 6. | \-purrr::map(.x, .f, ...) 7. +-base::split(., .$msoa11cd) 8. +-dplyr::slice_sample(., n = 5) 9. +-dplyr:::slice_sample.data.frame(., n = 5) 10. | +-dplyr::slice(...) 11. | \-dplyr:::slice.data.frame(...) 12. | +-dplyr::dplyr_row_slice(.data, loc, preserve = .preserve) 13. | \-dplyr:::dplyr_row_slice.data.frame(.data, loc, preserve = .preserve) 14. | +-dplyr::dplyr_reconstruct(vec_slice(data, i), data) 15. | | \-dplyr:::dplyr_new_data_frame(data) 16. | | +-row.names %||% .row_names_info(x, type = 0L) 17. | | \-base::.row_names_info(x, type = 0L) 18. | \-vctrs::vec_slice(data, i) 19. \-vctrs:::stop_scalar_type(...) 20. \-vctrs:::stop_vctrs(msg, "vctrs_error_scalar_type", actual = x) Execution halted
I can post more details of my
scan_local_constituencies function if anyone thinks that will help.