2012-04-03 34 views
0

回归线在R,可以使用下面的命令密谋回归线:如何绘制与rpy2

res=lm(height~age) 
abline(res) 

正如http://msenux.redwoods.edu/math/R/regression.php

我怎样才能做到同样的事情rpy2建议?我试图

from rpy2 import robjects 
r = robjects.r 
r.png('test.png') 
x = range(10) 
y = range(10) 
r.plot(x, y) 
r.abline(r.lm(x, y)) 

,但后来rpy2抱怨:

Error in formula.default(object, env = baseenv()) : invalid formula 
Traceback (most recent call last): 
    File "plot_ratio_price.py", line 34, in <module> 
    r.abline(r.lm(x, y)) 
    File "/Library/Python/2.7/site-packages/rpy2/robjects/functions.py", line 82, in __call__ 
    return super(SignatureTranslatedFunction, self).__call__(*args, **kwargs) 
    File "/Library/Python/2.7/site-packages/rpy2/robjects/functions.py", line 34, in __call__ 
    res = super(Function, self).__call__(*new_args, **new_kwargs) 
rpy2.rinterface.RRuntimeError: Error in formula.default(object, env = baseenv()) : invalid formula 

任何提示?谢谢!

+0

由于错误消息说你传递了一个错误的公式,也许你应该已经过去了一个公式到'r.lm',如[这里]概述(http://rpy.sourceforge.net/rpy2/doc-2.2/html/robjects_formulae.html)? – joran 2012-04-03 17:52:40

回答

2

以下是@ joran的评论,Rpy2要求你为公式提供一个特殊的对象。该文件说明类robjects.Formula represents an R formula。因此,在您最后一行之前(拨打r.abline)您需要创建一个公式对象并将其传递给您的lm()调用。

顺便说一句,你的问题的代码看起来足够接近rpy2的例子,你可以考虑使用它作为一个模板:

import array 
from rpy2.robjects import IntVector, Formula 
from rpy2.robjects.packages import importr 
stats = importr('stats') 

x = IntVector(range(1, 10)) 
y = IntVector(range(1, 10)) 

fmla = Formula('y ~ x') 
env = fmla.environment 
env['x'] = x 
env['y'] = y 

fit = stats.lm(fmla)