运行 一个函数 x 次,然后在再次运行之前休眠一段时间
Run a function x amount of times then sleep for a period before going again
我有一个包含 1000 个值的数据框,我需要将其传递给 API。
我发现如果我传递超过 500 个值,API 会引发错误,所以我希望传递 400 个值,在传递另一个 400 个值之前睡 10 分钟,然后再睡一个完成最后 200 分钟前 10 分钟。
为了提供一个代表,这里有一小部分数据样本:
examples <- data.frame(names = c(1003060377,1003213240,1003116930,1003020306,1003292350,1003094988,1003164716,1003156324,1003219981))
install.packages("pacman")
pacman::p_load(tidyverse,devtools)
devtools::install_github("frankfarach/npi")
x <- map_dfr(examples$names,npi::npi_search) %>%
select(addresses) %>%
unnest()
考虑到上面的小样本量,如果我可以让函数在传递两个值 1 分钟后进入休眠状态,然后继续下两个值等等,直到传递完所有值。
如果有人能提供帮助,我将不胜感激。
您可以使用 for
循环来跟踪已处理的条目。
library(dplyr)
library(tidyr)
result <- vector('list', nrow(examples))
for(i in seq(nrow(examples))) {
#Sleep for 1 minute after every 2 values
if(i %% 2 == 0) Sys.sleep(60)
result[[i]] <- npi::npi_search(examples$names[i])
}
bind_rows(result) %>%
select(addresses) %>%
unnest(addresses)
# country_code country_name address_purpose address_type address_1
# <chr> <chr> <chr> <chr> <chr>
# 1 US United Stat… LOCATION DOM 6601 PHO…
# 2 US United Stat… MAILING DOM 800 MARS…
# 3 US United Stat… LOCATION DOM 5835 NE …
# 4 US United Stat… MAILING DOM 2100 DOU…
# 5 US United Stat… LOCATION DOM 1163 BLA…
# 6 US United Stat… MAILING DOM 1163 BLA…
# 7 US United Stat… LOCATION DOM 500 COMM…
# 8 US United Stat… MAILING DOM 150 SCHA…
# 9 US United Stat… LOCATION DOM 6420 CLA…
#10 US United Stat… MAILING DOM 6420 CLA…
#11 US United Stat… LOCATION DOM 118 W NO…
#12 US United Stat… MAILING DOM PO BOX M
#13 US United Stat… LOCATION DOM 520 S SA…
#14 US United Stat… MAILING DOM 520 S SA…
#15 US United Stat… LOCATION DOM 910 S. H…
#16 US United Stat… MAILING DOM 24 ROY S…
#17 US United Stat… LOCATION DOM 1595 HAR…
#18 US United Stat… MAILING DOM 1595 HAR…
# … with 6 more variables: address_2 <chr>, city <chr>, state <chr>,
# postal_code <chr>, telephone_number <chr>, fax_number <chr>
我有一个包含 1000 个值的数据框,我需要将其传递给 API。
我发现如果我传递超过 500 个值,API 会引发错误,所以我希望传递 400 个值,在传递另一个 400 个值之前睡 10 分钟,然后再睡一个完成最后 200 分钟前 10 分钟。
为了提供一个代表,这里有一小部分数据样本:
examples <- data.frame(names = c(1003060377,1003213240,1003116930,1003020306,1003292350,1003094988,1003164716,1003156324,1003219981))
install.packages("pacman")
pacman::p_load(tidyverse,devtools)
devtools::install_github("frankfarach/npi")
x <- map_dfr(examples$names,npi::npi_search) %>%
select(addresses) %>%
unnest()
考虑到上面的小样本量,如果我可以让函数在传递两个值 1 分钟后进入休眠状态,然后继续下两个值等等,直到传递完所有值。
如果有人能提供帮助,我将不胜感激。
您可以使用 for
循环来跟踪已处理的条目。
library(dplyr)
library(tidyr)
result <- vector('list', nrow(examples))
for(i in seq(nrow(examples))) {
#Sleep for 1 minute after every 2 values
if(i %% 2 == 0) Sys.sleep(60)
result[[i]] <- npi::npi_search(examples$names[i])
}
bind_rows(result) %>%
select(addresses) %>%
unnest(addresses)
# country_code country_name address_purpose address_type address_1
# <chr> <chr> <chr> <chr> <chr>
# 1 US United Stat… LOCATION DOM 6601 PHO…
# 2 US United Stat… MAILING DOM 800 MARS…
# 3 US United Stat… LOCATION DOM 5835 NE …
# 4 US United Stat… MAILING DOM 2100 DOU…
# 5 US United Stat… LOCATION DOM 1163 BLA…
# 6 US United Stat… MAILING DOM 1163 BLA…
# 7 US United Stat… LOCATION DOM 500 COMM…
# 8 US United Stat… MAILING DOM 150 SCHA…
# 9 US United Stat… LOCATION DOM 6420 CLA…
#10 US United Stat… MAILING DOM 6420 CLA…
#11 US United Stat… LOCATION DOM 118 W NO…
#12 US United Stat… MAILING DOM PO BOX M
#13 US United Stat… LOCATION DOM 520 S SA…
#14 US United Stat… MAILING DOM 520 S SA…
#15 US United Stat… LOCATION DOM 910 S. H…
#16 US United Stat… MAILING DOM 24 ROY S…
#17 US United Stat… LOCATION DOM 1595 HAR…
#18 US United Stat… MAILING DOM 1595 HAR…
# … with 6 more variables: address_2 <chr>, city <chr>, state <chr>,
# postal_code <chr>, telephone_number <chr>, fax_number <chr>