2017-03-25 45 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") 

然后复制粘贴并运行代码(从倒数第二行删除逗号)。

相关问题