2017-06-10 2 views
0

J'ai écrit une fonction en utilisant le paquet googleway pour géocoder des adresses, qui malheureusement se bloque quand elle rencontre une erreur interne du serveur 500. La fonction est la suivante:Gestion de 500 erreur interne du serveur dans la fonction de géocodage R

rugeocoder.fun <- function(addr){ 
       require(googleway) 
       output <- vector("list", length=length(addr)) 
       for(i in 1:length(addr)){ 
        output[[i]] <- google_geocode(address=addr[i], key="myapikey", language="ru", simplify=T) 
        print(i) 
       } 
       return(output) 
       } 

(. Oui, je sais que je pourrais y arriver en utilisant lapply au lieu d'une boucle dans une fonction, mais j'aime avoir le compteur d'impression à la console)

Naturellement, cela me fait perdre toute la sortie jusqu'à ce point à cause d'une erreur relativement simple. Y at-il quelque chose que je peux faire pour avoir la fonction: a) enregistrer la sortie jusqu'à ce point, donc je peux le redémarrer à cette adresse ou b) continuer à essayer jusqu'à ce que l'erreur du serveur disparaisse (j'imagine temporaire?).

+2

Voir 'try' et ses fonctions similaires pour la gestion des erreurs et des conditions? . – nicola

+1

ce n'est pas vraiment un problème avec 'googleway' lui-même, n'est-ce pas? Vous pouvez recréer le problème/l'exigence simplement avec un exemple 'for-loop' simple où vous voulez gérer les erreurs dans la boucle - selon la suggestion de @nicola. – SymbolixAU

+1

@SymbolixAU Non, ce n'est pas un problème avec Google - J'ai joué avec tryCatch, et même si je peux l'obtenir pour lancer un message d'erreur et continuer, je n'ai pas encore trouvé un moyen de l'obtenir répéter cette adresse particulière jusqu'à ce que l'erreur 500 interne du serveur disparaisse. Je suppose que c'est une nouvelle question. –

Répondre

1

par les suggestions dans les commentaires, j'ai pu garder la boucle de tomber en panne quand il rencontre une erreur avec 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) 
       }