Вы можете использовать функцию excel_sheets
из пакета readxl
, чтобы получить вектор символов всех листов, содержащихся в файле excel.
Изменить:
Извините, теперь я понял, что вы загружаете файл CSV. Файлы CSV представляют собой плоские файлы и поэтому не имеют имен листов, поэтому единственный вариант - это имя файла. Поскольку вы, по сути, запрашиваете API, вы можете использовать пакет httr
вместо этого для отправки запроса GET
:
library(httr)
library(stringr)
res <- httr::GET("https://www.populationpyramid.net/api/pp/4/2019/?csv=true")
Это дает вам объект response
, который содержит всю интересную информацию - включая фактические данные (да) и имя файла.
Вы можете получить данные с помощью функции content
:
httr::content(res)
#> # A tibble: 21 x 3
#> Age M F
#> <chr> <dbl> <dbl>
#> 1 0-4 2891330 2747452
#> 2 5-9 2765393 2636519
#> 3 10-14 2614937 2501560
#> 4 15-19 2321520 2197654
#> 5 20-24 1950650 1843985
#> 6 25-29 1551332 1433056
#> 7 30-34 1255855 1138037
#> 8 35-39 1033269 954327
#> 9 40-44 834402 758533
#> 10 45-49 649695 603870
#> # … with 11 more rows
Чтобы получить файл name, нам нужно проявить немного больше творчества. Имя файла хранится в элементе content-disposition
в разделе headers
объекта res
:
res$headers$`content-disposition`
#> [1] "attachment; filename=Afghanistan-2019.csv"
Мы можем извлечь его с помощью регулярного выражения, которое вытягивает весь текст после первого =
:
stringr::str_extract(res$headers$`content-disposition`, "(?<=\\=).*")
# [1] "Afghanistan-2019.csv"
Поскольку response
объекты всегда должны содержать одну и ту же информацию в одних и тех же местах (особенно при получении из одного и того же API), вы можете легко автоматизировать этот процесс.