4

经过一番麻烦,我成功安装了rpy2。

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

R 脚本通过加载 txt 文件进行测试,并通过与 python/rpy2 脚本调用的相同 R 函数对其进行处理,并且工作正常。在 python 脚本中,我从文本文件的腌制版本开始(就像我在我的最终代码中一样,从 pandas 数据帧开始)。

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

我接近完成,但我不断收到此错误:

ExtractData(object, data, NULL) 中的错误:'names' 属性 [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 脚本中可用。

谢谢, 卢克

4

2 回答 2

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)

最后一个电话工作正常。

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

于 2013-04-08T12:19:27.750 回答
1

通常的 R 调试工具可以在 RPy 中使用,例如

ro.r("debug(glm)")

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

于 2017-03-17T09:06:29.557 回答