2017-03-25 12 views
0

위치 기반으로 사용할 계획 인 함수에 대한 무제한의 인수 목록이 있습니다. 벤치 마크에 제공된 인수를 사용하여 내 주어진 함수를 마이크로 벤치 :어떻게하면 다른 인수를 사용하여 동일한 기능을 프로그래밍 방식으로 마이크로 벤치 마크 표시 할 수 있습니까?

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

어떻게 패키지를 사용할 수와

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

? 위치 인수가 내 소스 목록에 이름이 지정되면 벤치 마크 자체의 이름이 지정되면 보너스 포인트가 표시됩니다.

패키지의 기본 : 마이크로 벤치 마크 사용 벤치 마크 대상 작업이 점으로 지정되는 곳을 흩어져 보았습니다. 평가되지 않은 표현식을 평가할 때는 list 인수를 사용할 수 있습니다. 이는 프로그래밍 방식으로 사용하기위한 올바른 경로와 같습니다. 그러나 expression()은 괄호 안의 내용을 문자 그대로 취급하기 때문에 expression() 내부에 인자를 삽입하는 방법을 찾지 못했습니다. 나는 파스()와 함께 어두운 길을 걸어 내려 갔고, 더 나은 방법이 있어야만하는 것처럼 보였다.

답변

0

하나의 해결 방법은 for 루프를 사용하여 cat 및 sprintf를 사용하는 것입니다. 매개 변수 조합이 여러 개있는 경우 문제가 될 수 있습니다.

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

그런 다음 코드를 복사하여 붙여 넣고 두 번째 줄에서 쉼표를 제거하십시오.