paste
векторизовано, поэтому нам не нужно делать map2
.Мы можем напрямую paste
'url' с датами и извлечь таблицу и использовать .id
для создания столбца 'Date' с именем vector
library(tidyverse)
out <- map_df(set_names(paste0(url, seq_dates_test), seq_dates_test), ~
.x %>%
read_html() %>%
html_nodes("table") %>%
html_table(header = TRUE) %>%
magrittr::extract2(1), .id = 'Date')
dim(out)
#[1] 1365 6
head(out)
# Date Time Event Address Responding Agency
#1 2019-03-20 23:51:00 Parking complaint 1398 DEWEY AV, Rochester Rochester City Police
#2 2019-03-20 23:12:00 Dangerous condition - no immediate danger to life or property 2970 W HENRIETTA RD, Henrietta Monroe County Police
#3 2019-03-20 22:50:00 Odor of smoke 2349 E RIDGE RD, Irondequoit Ridge Culver Fire
#4 2019-03-20 22:44:00 Dangerous condition DENISE RD/LAKE AV, Rochester Rochester City Police
#5 2019-03-20 22:00:00 Parking complaint 3150 W RIDGE RD, Greece Greece Police
#6 2019-03-20 21:58:00 Accident of motor vehicles involving unknown injury SB RT 590 AT BROWNCROFT BL, Rochester New York State Police
# Event ID
#1 CTYP190793429
#2 MCOP190793334
#3 RCUF190793284
#4 CTYP190793264
#5 GREP190793188
#6 NYSP190793186
Update
Если нам необходимо выполнить проверку на наличие ошибок и вернуть значение по умолчанию, можно использовать tryCatch
или possibly
из purrr
f1 <- function(x) {
x %>%
read_html() %>%
html_nodes("table") %>%
html_table(header = TRUE) %>%
magrittr::extract2(1)
}
pos1 <- possibly(f1, otherwise = NULL, quiet = TRUE)
outlst1 <- map(set_names(paste0(url, seq_dates_test),
seq_dates_test), pos1, .id = 'Date')
, а затем отфильтровать NULL
элементы
bind_rows(discard(outlst1, is.null))
данные
seq_dates_test <- structure(c(17975, 17976, 17977, 17978, 17979), class = "Date")
url <- "http://mcsafetyfeed.org/incidents.php?date="