2016-04-15 10 views
0

Ich schreibe den Code, um die Daten von Uncomtrade-eine UN-Datenbank zu erhalten. Da die Datenbank ein Nutzungslimit von 100 Anfragen/Stunde hat, muss ich eine Zeit da draußen verbringen. Ich mag den Code mit TryCatch schreiben, das wird:Complex tryCatch in Schleife-R

  1. automatisch eingestellten Programme jedes Mal der Fehler für max Limit
  2. Zeitüberschreitung
  3. Rerun für das aktuelle Niveau von i, j und k, wenn ein Verbindungsfehler orcurs erscheint

Mein aktueller Code funktioniert immer noch, obwohl, aber ich möchte lernen, wie TryCatch zu zu verwenden und auch ist es eine Möglichkeit, die loszuwerden für Schleifen. Kann die Apply-Familienfunktion hier verwendet werden? Danke Jungs

n=0 
    a<-c() 
for (i in (1996:2014)) { 
    for (j in c("0301","0302","0303","0304","0305","0306","0307","0308")) { 
      for (k in c("704","116","360","418","458","104","608","702","764")) { 
      s2<-paste(i,j,k,sep="") 
      a<-c(a,s2) 
      print (s2) 
      n<-n+1 
      if(n<=100) { 
      s1 <- get.Comtrade(r=k, ps=i, rg="2", cc=j, fmt="csv",px="H0") 
     Sys.sleep (1) 
      s1<-do.call(rbind.data.frame,s1) 
      library(foreign) 
      write.dta(s1,file=paste("D:/unTrade/",s2,".dta")) 
      } 
     else { 
      print(n) 
      print(s2) 
      print("reset here") 
      n=0 
      Sys.sleep(3610) 
     } 
      } 
     } 
      } 

Antwort

0

Ich kann nicht wirklich du mit dem TryCatch helfen(); Ich habe die Erfahrung selbst nicht. Die For-Schleifen sind eine Lösung (obwohl ich denke, in diesen Fällen sind die For-Schleifen nicht so schlecht; die Vektorisierung zählt wirklich bei allen Arten von Matrix-Operationen usw.).

dat <- expand.grid(i = 1996:1999, j = c("0301","0302","0303","0304","0305","0306","0307","0308"), k = c("704","116","360","418","458","104","608","702","764")) 
library(dplyr) 
dat %>% group_by(i, j, k) %>% 
    do({ 
     cat('s1 <- get.Comtrade(r=', .$k, ', ps=', .$i, ', cc=', .$j, ', rg=\"2\", fmt=\"csv\",px=\"H0\")\n') 
     flush.console() 
     # return(s1) 
    }) 

Von Ihrem eigenen Code s1 erscheint (auch) ein data.frame zu sein, in diesem Fall also die dplyr do() schön klebt all diese Rahmen miteinander Daten.

HTH

+0

danke. speicherte deine Antworten für späteren Gebrauch :) – Mathnoob