尝试将r库与rpy2一起使用时出错

时间:2012-11-09 22:46:22

标签: python r time-series rpy2

我正在尝试使用rpy2来使用R中的forecast包。我无法找到如何将列表转换为rpy2中的时间序列,所以我认为大熊猫的时间序列也可以正常工作。

from rpy2.robjects.packages import importr
from rpy2.robjects import r
fore = importr("forecast")
from pandas import *

data = [1, 2, 3, 4, 5, 6, 7, 8, 9]
s = Series(data)

f = fore(s, 5, level = c(80,95))

正在运行f会返回此错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'c' is not defined

我不知道该错误是否来自于使用pandas时间序列或不正确的语法来尝试使用来自R的forecast包。如果有人可以帮助我,我真的很感激。< / p>

编辑:我自己解决了。 以下是感兴趣的人的正确代码:

from rpy2.robjects.packages import importr
from rpy2.robjects import r
import rpy2.robjects.numpy2ri as rpyn
forecast = importr("forecast")

rcode = 'k = as.numeric(list(1, 2, 3, 4, 5, 6, 7, 8, 9))' #I just copied the contents of data in
r(rcode)
rcode1 = 'j <- ts(k)'
r(rcode1)
rcode2 = 'forecast(j, 5, level = c(80,95))'

x = r(rcode2)[1]
vector=rpyn.ri2numpy(x) #Converts from Float Vector to an array
lst = list(vector) #Converts the array to a list.

1 个答案:

答案 0 :(得分:1)

您是否阅读过错误消息?

NameError: name 'c' is not defined

该错误来自哪里?

f = fore(s, 5, level = c(80,95))

哪个是python代码吧?

Python中没有c函数 - 有一个R函数,但是那时你不在R中,你在Python中。

尝试(这是未经测试的):

f = fore(s, 5, level = [80,95])

使用Python的方括号来创建Python列表对象。这可能作为向量传递给R。

另外,我认为这不会奏效。如果您read the documentation,您会看到importr为您提供对包的引用,并在包中调用函数,您使用点分表示法。您需要fore.thingYouWantToCall(whatever)