2017-03-25 6 views
0

Ich habe eine unbegrenzte benannte Liste von Argumenten für eine Funktion, die ich positionell verwenden möchte, z.Wie kann ich Microbenchmark :: Microbenchmark die gleiche Funktion mit verschiedenen Argumenten programmgesteuert?

list(
    method1 = "method1", 
    method2 = "method2", 
    ..., 
    methodn = "methodn" 
) 

mit

function(method) { 
    if (identical(method, "method1")) {Sys.sleep(1); return(NULL)} 
    if (identical(method, "method2")) {Sys.sleep(2); return(NULL)} 
    Sys.sleep(nchar(method)) 
    return(NULL) 
} 

Wie kann ich Paket: meine-Micro gegebene Funktion zum Benchmark der bereitgestellten Argumente? Bonuspunkte, wenn der Benchmark selbst benannt wird, da das Positionsargument in meiner Quellenliste benannt ist.

Das Prime für Paket: Microbenchmark Verwendung Ich habe gesehen verstreut über ist, wo die zu bewertenden Aufgaben in Punkten angegeben sind. Das Argument list steht für die Auswertung nicht evaluierter Ausdrücke zur Verfügung. und das scheint der richtige Weg für den programmatischen Gebrauch zu sein. Da jedoch expression() das Innere des Parens als Literal behandelt, habe ich keine Möglichkeit gefunden, mein Argument in expression() einzufügen. Ich bin mit parse() auf eine dunkle Straße gegangen und habe es funktioniert - aber es scheint, als müsste es einen besseren Weg geben.

Antwort

0

Eine Lösung besteht darin, cat und sprintf mit einer for-Schleife zu verwenden, obwohl dies bei vielen Kombinationen von Parametern problematisch werden könnte.

Dann kopieren und einfügen und den Code ausführen (entfernen Sie das Komma aus der vorletzten Zeile).

Verwandte Themen