Я запрашиваю данные из GA, где дата начала каждой итерации содержится в списке (begDate). Я исследовал, как остановить потерю запрашиваемых данных с помощью tryCatch, если возникла ошибка до того, как цикл завершится через список. Обычно ошибки возникают из-за тайм-аутов. Я хотел бы иметь возможность повторить элемент перед тем, как перейти к следующему элементу. Для этого я поместил в обработчик ошибок тот же код, что и в основной части tryCatch. Однако это плохо, когда запрос в обработчике ошибок также истекает. Как мне написать это правильно? Большинство сообщений, которые я нашел, рассматривают эту проблему в цикле или переходят к следующему элементу. Я тоже смотрел с Restarts, но не понимал, как его использовать.Повторить элемент списка с tryCatch в lapply
begDate<-array(c(seq(as.Date("2014-04-01"), as.Date("2014-04-03"), by="1 day"))) #defining start date for each query
Test<-lapply(begDate, function(bDt){ #uses each element of begDate as the beginning time period of query with 90 day length
rg2<-paste0("users::condition::ga:sessionCount==1;dateOfSession<>", as.Date(bDt, origin = "1970-01-01"), "_", as.Date(bDt, origin = "1970-01-01"), ";users::condition::ga:goalCompletionsAll>0")
tryCatch(ga$getData(id,
walk = TRUE,
batch = TRUE,
start.date = as.Date(bDt+1, origin = "1970-01-01"),
end.date = as.Date(bDt+15, origin = "1970-01-01"),
metrics = "ga:sessions, ga:goalCompletionsAll" ,
dimensions = "ga:date, ga:goalPreviousStep1, ga:goalPreviousStep2, ga:goalPreviousStep3",
segment = paste0(rg2),
filters = ""
)
, error=function(e) { # just retries the query
ga$getData(id,
walk = TRUE,
batch = TRUE,
start.date = as.Date(bDt+1, origin = "1970-01-01"),
end.date = as.Date(bDt+15, origin = "1970-01-01"),
metrics = "ga:sessions, ga:goalCompletionsAll" ,
dimensions = "ga:date, ga:goalPreviousStep1, ga:goalPreviousStep2, ga:goalPreviousStep3",
segment = paste0(rg2),
filters = ""
)
}
)
})