Как передать числовой вектор, который используется как часть функции, в purrr? - PullRequest
0 голосов
/ 03 октября 2019

У меня есть функция, которую я написал, которая удаляет JSON из API и сохраняет результат на моем компьютере. Как взять числовой вектор и передать его функции для очистки каждого отдельного файла JSON и сохранения?

scrape_function <- function(period, api_key){

base_url <- "http://www.madeupurl.com/api/figures?"

params <- 
list(
period = period,
response_format = "JSON",
api_key = api_key)

resp <- httr::GET(base_url, params)
  # Save Response in JSON Format
  out <- httr::content(resp, as = "text", encoding = "UTF-8")

  # Read into JSON format
  json <-
    out %>%
    jsonlite::prettify() %>% 
    jsonlite::fromJSON(simplifyDataFrame = TRUE, flatten = TRUE) 

  # Save Raw JSON Output
  jsonlite::write_json(json, here::here("data-raw", "json", paste0("data-", period, ".json" )))

}

Я хочу запустить эту функцию для числового вектора периодов от 1 до 28. Результатом будут файлы, как указано в функции. Я не уверен, какую функцию purrr использовать, поскольку я использовал ее только для df, используя map_dfr.

period <- 1:28

1 Ответ

0 голосов
/ 04 октября 2019

Простейшим способом зацикливания на целочисленном векторе является, вероятно, for loop:

for (x in 1:28) {
 scrape_function(x, api_key)
}

. Вы можете перевести это в базовую R lapply:

lapply(1:28, function(x) {scrape_function(x, api_key)})

илипри вызове purrr::map, который допускает более короткую лямбда-функцию (~):

purrr::map(1:28, ~ scrape_function(.x, api_key))

Обратите внимание, что и lapply, и map будут вызывать желаемый побочный эффект (при записи файлов JSON)и список в качестве вывода. Если вас интересуют только побочные эффекты, которые вы также можете использовать walk.

purrr::walk(1:28, ~ scrape_function(.x, api_key))

walk не только производит побочные эффекты, он также может вернуть исходный объект, который был передан в него. при передаче по трубопроводу %>% выходных данных в другую функцию или при отображении с помощью (. В нашем случае это будет целочисленный вектор 1:28.

(purrr::walk(1:28, ~ scrape_function(.x, api_key)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...