Я пытаюсь использовать приведенный ниже код для выполнения вызовов API в параллельном процессе, чтобы ускорить вызовы API. (Я знаю, что это не лучший способ ускорить вызовы API, но он работает)
Это терпит неудачу только тогда, когда я пытаюсь использовать параллель, в противном случае он работает. В функции ldply я получаю следующую ошибку:
Ошибка в do.ply (i): не удалось выполнить задачу 1 - «объект типа 'closure' не является подмножеством». Кроме того:
Предупреждающие сообщения:
1:: ... может использоваться в неправильном контексте: ‘.fun (piece, ...)’
2:: ... может использоваться в неправильном контексте: ‘.fun (piece, ...)’
любая помощь будет оценена по достоинству!
One <- 26
cl<-makeCluster(4)
registerDoSNOW(cl)
func.time <- Sys.time()
## API CALL ONE FOR "kline"
url <- "https://api.binance.com"
path <- paste("/api/v1/klines?symbol=",pairs[1],"&interval=1m&limit=1", sep = "")
raw.results <- GET(url = url, path = path)
text_content <- content(raw.results, as = "text", encoding = "UTF-8")
kline <- data.frame(text_content %>% fromJSON())
kline$symbol <- pairs[1]
## API FUNCTION TO BE APPLIED FOR REST
loopfunction <- function(i){
url <- "https://api.binance.com"
path <- paste("/api/v1/klines?symbol=",pairs[i],"&interval=1m&limit=1", sep = "")
raw.results <- GET(url = url, path = path)
text_content <- content(raw.results, as = "text", encoding = "UTF-8")
kline_temp <- data.frame(text_content %>% fromJSON())
kline_temp$symbol <- pairs[i]
kline <- rbind(kline,kline_temp)
return(kline)
}
## DPLY PARALLEL FUNCTION
kline2 <- data.frame(ldply(2:(One - 1), .fun = loopfunction, .parallel = T, .paropts = c("httr", "jsonlite", "dplyr"))) ##"ONE" is a list varriable created earlier
stopCluster(cl)
func.end.time <- Sys.time()
func.tot.time ‹- func.end.time - func.time