私は現在、forループを使用して、Googlewayパッケージを使用して多数のアドレスをジオコーディングしています。最初は、ループの実行を停止する「500内部サーバーエラー」の問題が発生しました。私はtryCatch()を使ってこれを回避することができました。しかし、これは一時的なエラーであることが多いので、結果を受け取ったり、何らかの試行に達するまでエラーをスローするアドレスを繰り返すようにしたいと思います。エラーがなくなるまでループ内の値を繰り返す
残念ながら、私はtryCatch()とそれに関連するドキュメントが混乱していることが判明しました。エラーメッセージをスローして移動する以外に何かを行う方法が失われています。ここに私の現在のコードは次のとおりです。
rugeocoder.fun <- function(addr){
require(googleway)
output <- vector("list", length=length(addr))
tryCatch({
for(i in 1:length(addr)){
output[[i]] <- google_geocode(address=addr[i], key="myapikey", language="ru", simplify=T)
print(i)
}},error=function(e) output[[i]] <- "Error: reattempt")
return(output)
}
なぜ 'this_env < - environment() 'を使用したのか分かりますか?環境はここでは少し複雑ですが、オブジェクトに代入するために結果がsafe()関数で作成されたクロージャからグローバル環境にどのように移動するのかを追うのには問題があります。 –
@SeanNortonうん、それは混乱している。 'tryCatch()'はそれ自身の環境を使用しているように見えるので、 'result < - fn(...)'を実行するだけで動作しません。 –
@SeanNorton 'this_env'は' safe_whatever() 'クロージャーに属する環境だと思います。 –