2013-04-01 4 views
4

몇 가지 문제가 발생하여 rpy2를 성공적으로 설치했습니다.rpy2 및 R 디버깅

내 목표는 모델 (gam; Simon Wood의 라이브러리 mgcv)을 작성하고 python에서 rpy2를 통해 pandas 데이터 프레임을 gam 모델로 전달하고 예측을 검색하여 예측 기능을 사용하는 것입니다.

R 스크립트는 txt 파일을로드하여 테스트하고 python/rpy2 스크립트에서 호출하는 것과 동일한 R 함수를 통해 처리합니다. 제대로 작동합니다. 파이썬 스크립트에서 필자는 텍스트 파일의 피클링 된 버전부터 시작합니다 (마치 팬더 데이터 프레임에서 시작하여 최종 코드에있는 것처럼).

또한 R (비어있는 데이터 프레임을 전달하거나 열이없는 데이터 프레임이 예측을 성공적으로 수행하여 R 에서처럼 오류를 트리거 함) R 스크립트의 다른 오류를 트리거 할 수 있습니다. 실제로 입력 데이터가있는 gam 기능으로 들어갑니다.

내가 마무리에 가까운,하지만 난이 오류가 점점 계속 :

오류 ExtractData에서 (객체, 데이터, NULL) : '이름'속성을 [1] 벡터 [같은 길이해야합니다 0]

내 python 스크립트에서 R의 의견을 더받을 방법이 없습니다. 어떻게 디버깅 할 수 있습니까? 아니면 아무도 내가 R에서 문제가 될 수있는 것을 지적 할 수 있습니까? 또는이 부분은 "convert_to_r_dataframe()"함수의 일부입니다. 완전히 이해하지 못합니까 ???

R-코드 :

f_clean_data <- function(df) { 
     t = df 
     ... some preprocessing 
     t 

     } 

tc <- f_clean_data(t) 


f_py_gam_predict <- function(gam, df) { 
       dfc = f_clean_data(df) 
       result <- predict(gam, dfc) 
       result 
       } 

bc_gam = gam(BC ~ 
       +s() 
       .... some gam model 

     , data=tc, method="REML" 
     ) 
summary(bc_gam) 


testfile = 'a_test_file.txt' 

ttest <- read.table(file=testfile ,sep='\t',header=TRUE); 

result = f_py_gam_predict(bc_gam, ttest) 

f_py_gam_predict는 파이썬 스크립트에서 사용할 수 있습니다.

감사합니다, 뤽

+0

버전이 도움이 될 수도, RPY 내에서 사용할 수 있습니다. 'convert_to_r_dataframe'에 pandas (버전 2.3.4부터 rpy2와 함께 제공됨)로 변환하는 데 문제가있었습니다 만, 그동안 convert_to_r_dataframe이 수정 사항을 수신했다고 들었습니다. – lgautier

답변

2

확인 당신이 s()에 공급 데이터 유형. 나는 또한 datetime 설명 변수를 사용할 때 Error in ExtractData(object, data, NULL) : 'names' attribute [1] must be the same length as the vector [0]을 얻었습니다. 나는이 문제를 시작한 이후의 일수로 변환하여 해결했다.

> library(lubridate) 
> library(mgcv) 
> df <- data.frame(x=today() + 1:20, y=1:20) 
> gam(y~s(x), data=df) 
Error in ExtractData(object, data, knots) : 
    'names' attribute [1] must be the same length as the vector [0] 
> df$xnum <- (df$x - df$x[1])/ddays(1) 
> str(df) 
'data.frame': 20 obs. of 3 variables: 
$ x : Date, format: "2013-04-09" "2013-04-10" "2013-04-11" "2013-04-12" ... 
$ y : int 1 2 3 4 5 6 7 8 9 10 ... 
$ xnum: num 0 1 2 3 4 5 6 7 8 9 ... 
> gam(y~s(xnum), data=df) 

마지막 호출이 정상적으로 작동합니다.

디버깅의 경우 종종 rpy2에서 save.image()을 호출 한 다음 .RData 파일을 일반 R 세션으로로드하여 자세히 조사합니다.

1

일반적인 R 디버그 도구는 각각의 비트에 대한 같은

ro.r("debug(glm)") 

또는 ro.r("options(error=recovery)")

관련 문제