Python rpy2和R调试

Python rpy2和R调试,python,r,pandas,rpy2,Python,R,Pandas,Rpy2,经过一些麻烦之后,我成功地安装了rpy2 我的目标是构建模型(gam;simonwood的库mgcv)并使用predict函数,通过rpy2将pandas数据帧从python传递到gam模型并检索预测 R脚本通过加载txt文件进行测试,并通过python/rpy2脚本调用的相同R函数对其进行处理,效果良好。在python脚本中,我从文本文件的pickle版本开始(就好像我在最后的代码中,从一个数据帧开始) 我还能够在R脚本中触发其他有意义的错误(传递一个空数据帧,或者传递一个缺少列的数据帧以成功

经过一些麻烦之后,我成功地安装了rpy2

我的目标是构建模型(gam;simonwood的库mgcv)并使用predict函数,通过rpy2将pandas数据帧从python传递到gam模型并检索预测

R脚本通过加载txt文件进行测试,并通过python/rpy2脚本调用的相同R函数对其进行处理,效果良好。在python脚本中,我从文本文件的pickle版本开始(就好像我在最后的代码中,从一个数据帧开始)

我还能够在R脚本中触发其他有意义的错误(传递一个空数据帧,或者传递一个缺少列的数据帧以成功执行预测,两者都会触发一个错误,就像在R脚本中一样)。我确实在输入数据完整的情况下进入gam函数

我已接近终点,但我不断遇到以下错误:

提取数据时出错(对象、数据、空): “名称”属性[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\u clean\u data检查馈送到
s()的数据类型。
。在使用datetime解释变量时,ExtractData(对象、数据、NULL)中也出现了
错误:'names'属性[1]的长度必须与向量[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)
>库(lubridate)
>图书馆(mgcv)
>df gam(y~s(x),数据=df)
提取数据时出错(对象、数据、结):
“名称”属性[1]的长度必须与向量[0]的长度相同
>df$xnum str(df)
“数据帧”:20 obs。共有3个变量:
$x:日期,格式:“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:num0123456789。。。
>gam(y~s(xnum),数据=df)
最后一个电话没问题


至于调试,我经常从rpy2调用
save.image()
,然后将.RData文件加载到普通的R会话中以供进一步检查。

通常的R调试工具可以从RPy内部使用,例如

ro.r("debug(glm)")

或者
ro.r(“选项(错误=恢复)”)

相应位的版本可能会有所帮助。在
convert_to_r_dataframe
中出现了一些问题,这使得我对pandas进行了转换(从2.3.4版开始随rpy2提供),但我也听说在此期间
convert_to_r_dataframe
收到了修复。