У меня есть фрейм данных с началом и концом каждого месяца 2019 года.
Мне нужно сделать выборку в API, написать CSV-файл с именем mydf
плюс месяц ( например, mydf-01.csv
, mydf-02.csv
и др. c).
Мне нужно получить данные, записать CSV, очистить память, чтобы избежать сообщения об ошибке «недостаточно памяти», и продолжить в следующем месяце.
Пока у меня есть это, но есть из-за ошибки: недостаточно памяти, потому что ожидаемые данные за весь 2019 год составляют около 3 ГБ. Но, может быть, я могу использовать другую функцию семейства применений?
Месяцы: my_dates data.frame
Вот как это выглядит:
from to
2019-01-01 2019-01-31
2019-02-01 2019-02-28
2019-03-01 2019-03-31
...
Код для генерации 12 месяцев:
som <- function(x) as.Date(cut(as.Date(x), "month")) # start of month
eom <- function(x) som(som(x) + 32) - 1 # end of month
month_ranges <- function(from, to) {
s <- seq(som(from), as.Date(to), "month")
data.frame(from = pmax(as.Date(from), s), to = pmin(as.Date(to), eom(s)))
}
my_dates <- month_ranges(som("2019-01-01"), eom("2019-12-31"))
Код для извлечения данных:
В настоящее время он выбирает все месяцы хранит их в памяти и в конце соединяет их вместе. Однако такой подход дает ошибку, когда месячный диапазон слишком велик, поскольку данные превышают 2 ГБ. Поэтому я бы хотел, чтобы каждый месяц сохранялись данные в> CSV и продолжался следующий месяц.
library(googleAuthR)
library(googleAnalyticsR)
my_fetch <- function(ga_id, d1, d2) {
google_analytics(ga_id,
date_range = c(d1, d2),
metrics = c("totalEvents"),
dimensions = c("ga:date", "ga:eventCategory", "ga:eventAction", "ga:eventLabel"),
anti_sample = TRUE,
anti_sample_batches = 1,
rows_per_call = 400)
}
my_fetches_fetches <- mapply(my_fetch, myviewID, my_dates$from, my_dates$to, SIMPLIFY = FALSE)
total <- do.call(rbind, my_fetches_fetches)
ОБНОВЛЕНИЕ 1:
Может быть, можно было бы передать "l oop", которая генерирует ошибку, например, тайм-аут API для продолжения до следующего месяца?