2015-01-30 1 views
2

내가 Tableau에 쓴 R 함수를 연결하는 데 많은 어려움을 겪고 있습니다. 함수는 Rcpp를 사용합니다.Tableau에서 Rcpp 함수를 호출 할 때 오류가 발생합니다. Rserve 로그를 해석하고 디버그하는 방법?

R에서 prob_1_beats_2(1, 2, 3, 4)으로 전화하면 정상적으로 작동합니다. 나는 아래로 추적 할 수없는 것

Error in eval(expr, envir, enclos) : expecting a single value

: 나는 Rserve를 사용하여 극적 장면에 연결하려고 할 때 그러나,이 오류가 발생합니다. 나는 Rserve를 디버그 모드로 실행하려고했지만 아무 소용이 없었다. 나는이 결과를 해석하는 방법을 확신 할 수 없다. 디버그 로그의

요점 R.에서 호출되고 정확하게 추적 할 좋은 것 : https://gist.github.com/FrankPortman/f5cfe32596fd47080286

prob_1_beats_2 <- function(alpha_1, beta_1, alpha_2, beta_2, percent_lift = 0) { 

    if(alpha_1/beta_1 < alpha_2/beta_2) { 

    t1 <- alpha_2 
    t2 <- beta_2 

    alpha_2 <- alpha_1 
    beta_2 <- beta_1 

    alpha_1 <- t1 
    beta_1 <- t2 

    } 

    alt_count(alpha_1, beta_1, alpha_2, beta_2) 

} 

그리고 여기 Rcpp 기능입니다 :

double alt_count(double alpha_1, double beta_1, double alpha_2, double beta_2) { 

    double total = 0; 

    for(int i = 0; i < alpha_1; i++) { 

    total += exp(i * log(beta_1) + alpha_2 * log(beta_2) - (i + alpha_2) * log(beta_1 + beta_2) - log(i + alpha_2) - lbeta(i + 1, alpha_2)); 

    } 

    return total; 

} 

당신이 볼 수 있듯이이 :

> prob_1_beats_2(1, 2, 3, 4) 
[1] 0.7037037 

마지막으로, 내가 사용하고있는 Tableau 호출 :

SCRIPT_REAL("library(mypackage);prob_1_beats_2(1, 2, 3, 4)", 1.0, 2.0, 3.0, 4.0) 

는 0.7037037를 반환 않습니다 는

SCRIPT_REAL("library(mypackage);prob_1_beats_2(.arg1, .arg2, .arg3, .arg4)", 1.0, 2.0, 3.0, 4.0) 

참고. 내가 사용하게 될 실제 Tableau 호출은 1 : 4의 상수 값을 사용하지 않지만 디버깅 목적으로 이것을 사용하려고합니다.

답변

1

Tableau는 항상 값을 벡터로 R로 전달하는 것으로 보입니다. 때 입력 :

SCRIPT_REAL("library(mypackage);prob_1_beats_2(.arg1, .arg2, .arg3, .arg4)", 1.0, 2.0, 3.0, 4.0) 

R 실제로 함수에 인수로 등 c(1 , 1 , 1 , 1 , etc.), c(2 , 2 , 2 , 2 , 2 , etc.)을 얻고 있었다. 어떤 이유로 Rcpp 구성 요소없이 처리되었지만 Rcpp를 포함하도록 함수를 다시 작성할 때 실패했습니다.

이 해결 방법은 지금은 잘 될 것 같다 :

prob_1_beats_2 <- function(alpha_1, beta_1, alpha_2, beta_2, percent_lift = 0, min_lift = FALSE) { 

    alpha_1 <- as.numeric(alpha_1[1]) 
    beta_1 <- as.numeric(beta_1[1]) 
    alpha_2 <- as.numeric(alpha_2[1]) 
    beta_2 <- as.numeric(beta_2[1]) 

    ... 

} 
관련 문제