2016-06-23 4 views
0

各繰り返しの開始日がリスト(begDate)に含まれているGAのデータを照会しています。私は、lapplyがリストを巡回する前にエラーが発生した場合、tryCatchを使用してクエリされたデータの損失を止める方法を研究しました。 通常、タイムアウトのためにエラーが発生します。私は、次の要素に移動する前に要素を再試行できるようにしたいと思います。これを行うために、私はtryCatch本体と同じコードをエラーハンドラに入れました。ただし、エラーハンドラのクエリもタイムアウトすると、これはうまくいきません。どのようにこれを正しく書いていますか?私が見つけたほとんどの投稿は、この問題をループで処理したり、次の要素に移動したりします。私はリスタートも見ていたが、使い方を理解していなかった。lapplyのtryCatchでリストの要素を再試行

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 = "" 
      )  
         } 

    ) 

}) 

答えて

0

これは私が(私は常にを改善しようとしていた)、より良いコードを書く方法を知っているが存在しない場合に最も安定であることが判明しているソリューションです。

Test<-lapply(begDate, function(bDt){ #uses each element of begDate as the beginning time period of query with 50 day length 
    rg2<-paste0("users::condition::ga:source=~", urlV, ";dateOfSession<>", as.Date(bDt, origin = "1970-01-01"), "_", as.Date(bDt, origin = "1970-01-01")) 

tryCatch(GA $のgetData(ID、 散歩= TRUE、 バッチ= TRUE、 start.date = as.Date(BDT + 1、起源= "1970-01-01")、 セグメント= seg、 フィルタ= "ga:0"のように、end.date = as.Date(bDt + 50、origin = "1970-01-01")、 metrics = paste0(metr)、 dimension = paste0(dim)国=〜米国 " )

、error = function(e){ Sys.sleep(7) tryCatch(ga $ getData(id、 walk = TRUE、 バッチ= TRUE、 start.date = as.Date(bDt + 1、origin = "1970-01-01")、 end.date = as。メトリクス= paste0(metr)、 ディメンション= paste0(dim)、 セグメント= seg、 filters = "ga:country =〜米国"日付(bDt + 50、起点= "1970-01-01" ) 、誤差=関数(E)プリント(paste0(BDT、 ""、E))) })

})

関連する問題