2016-12-04 4 views
0

Ich versuche, R-Ergebnisse in Python zu reproduzieren. Der folgende R-Code funktioniert:Übergabe eines Pandas-Datenrahmens durch eine R-Funktion mit rpy2

library("TTR") 
library("zoo") 
library("xts") 
library("quantmod") 
getSymbols("^GSPC",from = "2014-01-01", to = "2015-01-01") 
dataf = GSPC[,c("GSPC.High", "GSPC.Low", "GSPC.Close")] 
result = CCI(dataf, n=20, c=0.015) 

Aber nicht der folgende Python-Code:

from datetime import datetime 
from rpy2.robjects.packages import importr 
TTR = importr('TTR') 
import pandas_datareader as pdr 
from rpy2.robjects import pandas2ri 
pandas2ri.activate() 

GSPC = pdr.get_data_yahoo(symbols='^GSPC', start=datetime(2014, 1, 1), end=datetime(2015, 1, 1)) 
dataf = GSPC[['High', 'Low', 'Close']] 
result = TTR.CCI(dataf, n=20, c=0.015) 

Der Fehler tritt ich in der letzten Zeile erhalten, wenn TTR.CCI verwenden. Traceback und Fehler zurückgegeben:

Traceback (most recent call last): 
File "svm_strat_test_oliver.py", line 30, in <module> result = TTR.CCI(dataf, n=20, c=0.015) 
File "/usr/local/lib/python2.7/site-packages/rpy2/robjects/functions.py", line 178, in __call__ 
return super(SignatureTranslatedFunction, self).__call__(*args, **kwargs) 
File "/usr/local/lib/python2.7/site-packages/rpy2/robjects/functions.py", line 106, in __call__ 
res = super(Function, self).__call__(*new_args, **new_kwargs) 
rpy2.rinterface.RRuntimeError: Error in `[.data.frame`(center, beg:NROW(x)) : undefined columns selected 
+1

Der Fehler ohne die Rückverfolgung ist oft viel weniger hilfreich als die vollständige Rückverfolgung. Versuchen Sie auch, verschachtelte Funktionsaufrufe in Einzeilern aufzubrechen, wenn Sie sich nicht sicher sind, was passiert. Es erleichtert das Überprüfen, ob sich jede Funktion wie erwartet verhält. Versuchen Sie zum Beispiel: 'dataf = GSPC [['High', 'Low', 'Close']]' und rufen Sie dann 'TTR.CCI()' auf 'dataf' auf. – lgautier

+0

@ lgautier Ich habe die Traceback hinzugefügt und die Einzeiler aufgeteilt. –

+1

Wie die Fehlermeldung sagt: rpy2 weiß nicht, was mit Pandas-Datenrahmen zu tun ist. Überprüfen Sie die Antworten für diese Frage: http://stackoverflow.com/questions/30922213/minimal-example-of-rpy2-regression-using-pandas-data-frame – lgautier

Antwort

0

Ihre data.frame im R-Code ist eigentlich ein "XTS" "Zoo" Objekt, das Sie brauchen nur sie in der Python-Code zu umwandeln:

rzoo = importr('zoo') 
datazoo = zoo.as_zoo_xts(dataf) 
result = TTR.CCI(datazoo, n=20, c=0.015)