您可以使用readxl 包中的excel_sheets 函数来获取包含在excel 文件中的所有工作表的字符向量。
编辑:
抱歉,我现在意识到您正在下载 CSV 文件。 CSV 文件是平面文件,因此没有任何工作表名称,因此您唯一的选择是文件名。由于您实际上是在查询 API,因此您可以使用 httr 包来发送 GET 请求:
library(httr)
library(stringr)
res <- httr::GET("https://www.populationpyramid.net/api/pp/4/2019/?csv=true")
这为您提供了一个 response 对象,其中包含各种有趣的信息 - 包括实际数据 (duh) 和文件名。
可以通过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
要检索文件名,我们需要更多创意。文件名存储在res 对象的headers 部分的content-disposition 元素中:
res$headers$`content-disposition`
#> [1] "attachment; filename=Afghanistan-2019.csv"
我们可以用一个正则表达式来提取它,它会提取出第一个=之后的所有文本:
stringr::str_extract(res$headers$`content-disposition`, "(?<=\\=).*")
# [1] "Afghanistan-2019.csv"
由于response 对象应始终在相同位置包含相同信息(尤其是从相同 API 检索时),因此您可以轻松地自动执行此过程。