Примерно так должно работать:
1:Calls %>%
purrr::map(~ paste0("https://apirest&max-results=10000&page-num=",.,"&apikey=123")) %>%
purrr::map(~ xml2::read_html(.) %>% rvest::html_table(fill = T)) %>%
dplyr::bind_rows()
EDIT:
Объясняя, как это работает.
Оператор %>%
или pipe работает, передавая (или передавая) результаты вызова функции другой функции, тем самым ограничивая создание временных переменных.
purrr::map
берет список и применяет функцию к каждому члену этого списка. Таким образом, для каждого целого числа в 1:Calls
он вызывает paste0
, создающий строку URL. Помещение ~
перед вашей функцией в вызове map
- это немного синтаксического сахара, который позволяет вам использовать заполнитель .
в качестве прокси для каждого элемента вашего списка, который передается.
Таким образом, в случае purrr::map(~ paste0("https://apirest&max-results=10000&page-num=",.,"&apikey=123")
, .
становится каждым целым числом в 1:Calls
. Итак, в первой итерации это 1
, затем 2
и т. Д.
Когда первый purrr::map
сделан, у вас теперь есть список строк URL. Этот список строк затем передается другому purrr::map
, функция которого берет строку URL и возвращает dataframe
, читая html URL-ссылки и извлекая из нее таблицу. Вы можете заменить этот код любым кодом, который вам нравится, который принимает вашу строку URL в качестве ввода и возвращает желаемое значение dataframe
.
После этого шага у вас есть список данных. Этот список затем передается по каналу dplyr::bind_rows()
, который объединяет все кадры данных в вашем списке в один кадр данных.