2017-03-25 78 views
0

我有一個無邊界的命名列表的參數,我打算使用位置的函數,例如,我怎樣才能microbenchmark :: microbenchmark與編程不同參數相同的功能?

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

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

如何使用包:微基準的基準使用所提供的參數給我的功能?如果基準本身被命名爲位置參數在我的源列表中進行了命名,則爲獎勵點。

軟件包的主要用途:microbenchmark的使用我已經看到分散的是要以基點指定的基準任務。自變量list可用於評估未評估的表達式;這似乎是程序使用的正確途徑。但是,因爲expression()將parens的內部視爲文字,所以我沒有找到在expression()中注入我的參數的方法。我用parse()走了一條黑暗的道路,並且讓它工作 - 但似乎必須有更好的方法。

回答

0

一個解決方案是將cat和sprintf與for循環一起使用,但如果您有多個參數組合,則可能會出現問題。

cat("res <- microbenchmark(\n") 
for (i in 1:4){ 
    for (j in 1:4) { 
    cat(sprintf("f_%i_%i = f(%i, %i),\n", i, j, i, j)) 
    } 
} 
cat(")\n") 

然後複製粘貼並運行代碼(從倒數第二行刪除逗號)。

相關問題