2016-04-15 23 views
0

UNのデータベースUncomtradeからデータを取得するコードを書いています。データベースには100回の照会/時間の使用制限があるので、タイムアウトを設定する必要があります。 私は意志tryCatchとコード書きたい:接続エラーorcursあれば毎回最大制限のエラーがI、J、Kの現在のレベルのために ループ-R内の複雑なtryCatch

  • 再実行を思わアウト時に

    1. 自動的に設定されたプログラムを

    私の現在のコードはまだ動作しますが、tryCatchの使用方法も学びたい また、forループを取り除く方法もあります。適用ファミリ機能はここで使用できますか? みんなありがとう

    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) 
         } 
          } 
         } 
          } 
    
  • 答えて

    0

    私は本当に)(TryCatchのお手伝いをすることはできません。私は自分自身の経験がありません。

    forループに関しては、これは1つの解決策です(私はこれらのケースではforループは悪くないと考えていますが、ベクトル化はすべての種類の行列演算などで実際にカウントされます)。独自のコードS1(も)から

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

    はdata.frameように見えるので、この場合には、dplyr do()がうまく一緒に、これらすべてのデータフレームを接着します。

    HTH

    +0

    ありがとう。後で使うためにあなたの答えを保存しました:) – Mathnoob

    関連する問題