2016-04-24 3 views
0

Ich habe eine R-Funktion erstellt, die ein tryCatch-Konstrukt verwendet, um Fehler zu überspringen. Die Funktion arbeitet, wenn sie als Standalone ausgeführt, sondern einen Fehler gibt, wenn innerhalb einer Rmarkdown Datei ausführtFehler beim Ausführen der Rmd-Datei, aber keine, wenn die Funktion direkt ausgeführt wird

Der Code ist wie unten

for(x in 1:length(aa)){ 
    bowlers <- unique(aa[[x]]$bowler) 
    for (y in 1:length(bowlers)){ 
     #cat("x=",x,"team",theTeams[x],"\n") 
     tryCatch(l <- getBowlerWicketDetails(team=theTeams[x],name=bowlers[y],dir="."), 
       error = function(e) { 
        print("Error!") 

       } 

     ) 
     l <- select(l,bowler,wickets,economyRate) 
     o <-rbind(o,l) 

    } 
} 

ich folgende Fehlermeldung erhalten, wenn innerhalb eines Rmd den Code ausführt. . Der Fehler wird

Fehler in select _ (Daten, .dots = lazyeval :: lazy_dots (...) ,: Objekt l keine Anrufe gefunden: Anonymos usw.

Ich denke, der Code ist sogar versucht, zu bewerten, wenn ein Fehler in der getBowlerWicketDetails() Funktion gibt es, wenn ‚l‘ nicht zur Verfügung. Wie kann dieses Problem gelöst werden?

+0

Ich vermute, dass die Funktion 'getBowlerWicketDetails (team = theTeams [x], Name = Bowlers [y], dir =". ")', In Ihrem aktuellen Arbeitsverzeichnis funktioniert, weil das Verzeichnis dasselbe ist, vielleicht ist das nicht der Fall Ihre Rmd-Datei. Versuchen Sie mit 'dir = full_path_to_dir' anstelle von' dir = .' – OdeToMyFiddle

+0

Ossnan - Es hat nicht geholfen. Vollständiger Pfad hinzugefügt. Wenn ich den Befehl separat in der Markdown-Datei ausführe, funktioniert es, aber wenn es als Markdown ausgeführt wird, erhalte ich den Fehler. A –

+0

Ohne ein reproduzierbares Beispiel können wir nur über mögliche Probleme spekulieren. Ich schlage vor, einige Dummy-Daten mit 'dput (data)' – OdeToMyFiddle

Antwort

0

schließlich das Problem durch das Hinzufügen einer zusätzliche Kontrolle vorhanden ist() gelöst. Wie bereits erwähnt, direkt die Ausführung der Funktion schien zu funktionieren, während die Ausführung innerhalb von Rmd gab die Variable nicht existiert

Der modifizierte Code wie folgt

for(x in 1:length(aa)){ 
    bowlers <- unique(aa[[x]]$bowler) 
    for (y in 1:length(bowlers)){ 
     #cat("x=",x,"team",theTeams[x],"\n") 
     tryCatch(l <- getBowlerWicketDetails(team=theTeams[x],name=bowlers[y],dir="."), 
       error = function(e) { 
        #print("Error!")       
       }      
     ) 
     if(exists("l")){    
      m <- select(l,bowler,wickets,economyRate) 
      o <-rbind(o,m) 
     } 

    } 
} 

Diese für beide endlich geklappt.

Vielen Dank!

Verwandte Themen