2013-04-01 45 views
4

經過一番麻煩我成功安裝了rpy2。rpy2和R調試

我的目標是構建模型(gam; Simon Wood的庫mgcv),並使用預測函數將來自python的pandas數據框通過rpy2傳遞給gam模型並檢索預測。

R腳本通過加載txt文件進行測試,並通過與python/rpy2腳本調用的相同的R函數進行處理,並且它工作正常。在python腳本中,我從文本文件的pickle版本開始(就像我在我的最終代碼中,從一個pandas數據框開始)。

我也可以觸發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是在Python腳本可用。

感謝, 呂克

+0

的版本的各個比特可能會有所幫助。 'convert_to_r_dataframe'中存在一些問題,導致我對熊貓進行了轉換(從rpy2開始,從版本2.3.4開始),但我同時也聽說'convert_to_r_dataframe'得到了修正。 – lgautier

回答

2

檢查你喂到s()的數據類型。當我使用日期時間解釋變量時,我也得到了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

通常ř調試工具是可用的從內RPY,如

ro.r("debug(glm)") 

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