R Зацикливание на нескольких взаимозависимых функциях, которые не могут зацикливаться - PullRequest
0 голосов
/ 28 апреля 2018

Я создаю функцию для загрузки данных Google Analytics из длинного списка профилей, и мне нужна функция цикла, которая может переносить профиль, не возвращающий данных.

Проблема заключается в том, что между началом цикла и местом возникновения ошибки требуется несколько функций.

Функция вставки извлекает идентификатор из idsvector, а затем запрос API строится в 2 последовательных шага. Затем он отправляется в API с помощью GetReportData(). Второй идентификатор в списке не возвращает данных от API. В настоящее время он загружает данные из первого профиля, объединяет их с основным набором данных и затем останавливается.

    for (v in idsvector){
  view.id <- paste("ga:",v,sep="") #the View ID parameter need to have "ga:" in front of the ID 

  sourcequery.list <- Init(
    start.date = start.date,
    end.date =  end.date,
    dimensions = "ga:channelGrouping,ga:campaign,ga:source,ga:medium,ga:date",
    metrics = "ga:sessions,ga:bounces",
    table.id = view.id,
    max.results = 9999999
  )
}
  ga.sourcequery <- QueryBuilder(sourcequery.list)
                data <-  GetReportData(ga.sourcequery, token)
                error=function(e){dev.off(); return(NULL)}
    if (!is.null(data)) {

      data$Property <- view.id
      final.data<-rbind(sourcequery.data,data)

}
  else {
  next
  }
}

Как мне адаптировать это так, чтобы он возвращался назад и пробовал следующий идентификатор?

1 Ответ

0 голосов
/ 28 апреля 2018

Не уверен, что это решит вашу проблему, но лучший подход для этого - использовать lapply.

Не ясно, какую библиотеку вы используете для доступа к GA, поэтому я составлю для вас код:

library(data.table)
ga_load_property_data <- function(property) {
  # here goes GA API wrapper magic
}

data <- lapply(properties, ga_load_property_data)
data <- rbindlist(data, idcol = "property")

Таким образом вы отделяете логику загрузки от своих итераций.

...