Konvertieren eines R ListVector in eine Python-Liste mit rpy2

Ich habe eine Funktion, die die Elemente in einer Python-Liste nimmt, sie durch eine Funktion in R setzt und sie als R ListVector ausgibt. Das Problem ist, dass ich in der Dokumentation nicht finden kann, wie man von einem ListVector in ein reguläres Python-Objekt umwandelt. Hier ist mein Code:

from rpy2.robjects.packages import importr from rpy2.robjects import r forecast = importr("forecast") parallel = importr("multicore") data = [[1, 2, 3], [4, 5, 6,], [7, 8, 9]] tuples = tuple(tuple(x) for x in data) data_list = [] for i in range(0, len(data)): result1 = "k = as.numeric((list%r))" % (tuples[i],) data_list.append(result1) def forecaster(item): rcode = item r(rcode) rcode1 = 'j <- ts(k)' r(rcode1) rcode2 = 'p <- parallel(forecast(k, 5, level = c(80,95)))' r(rcode2) rcode3 = 'collect(list(p))' return r(rcode3) z = [forecaster(x) for x in data_list] 

Running z gibt mir Ausgabe wie folgt:

 [<ListVector - Python:0x4e5f908 / R:0x4a0fcd8> [ListVector] <ListVector - Python:0x4e5f908 / R:0x4a0fcd8> [ListVector], <ListVector - Python:0x4e5fcf8 / R:0x49f9c48> 

…Und so weiter. Könnte jemand bitte helfen mir herauszufinden, wie man diese ListVectors in etwas umwandeln kann ich eigentlich in Python verwenden? Vielen Dank.

2 Solutions collect form web for “Konvertieren eines R ListVector in eine Python-Liste mit rpy2”

Ich ändere deine Prognose-Funktion (nur letzte Zeile), mit cbind , um einen R-Vektor und nicht einen listVector zu bekommen

 def forecaster(item): rcode = item r(rcode) rcode1 = 'j <- ts(k)' r(rcode1) rcode2 = 'p <- parallel(forecast(k, 5, level = c(80,95)))' r(rcode2) return r('c(do.call("cbind",collect(list(p))))') z = [forecaster(x) for x in data_list] 

Jetzt haben wir in za Struktur, auf die Sie zugreifen können

 z[0] <ListVector - Python:0x452d908 / R:0x457c770> [StrVe..., Float..., Float..., ..., RNULL..., Float..., Float...] <no name>: <class 'rpy2.robjects.vectors.StrVector'> <StrVector - Python:0x452d248 / R:0x2ec88f8> ['Mean'] <no name>: <class 'rpy2.robjects.vectors.FloatVector'> <FloatVector - Python:0x452dfc8 / R:0x3ad1018> [80.000000, 95.000000] <no name>: <class 'rpy2.robjects.vectors.FloatVector'> <FloatVector - Python:0x452de18 / R:0x457de88> [1.000000, 2.000000, 3.000000] ... <no name>: <type 'rpy2.rinterface.RNULLType'> rpy2.rinterface.NULL <no name>: <class 'rpy2.robjects.vectors.FloatVector'> <FloatVector - Python:0x452dd88 / R:0x457ddb0> [2.000000, 2.000000, 2.000000] <no name>: <class 'rpy2.robjects.vectors.FloatVector'> <FloatVector - Python:0x45316c8 / R:0x457dd68> [-1.000000, 0.000000, 1.000000] 

Ich habe ein ähnliches Beispiel mit rpy2 wie folgt gemacht:

  x = [1,2,3,4,1,2,3,4,1,2] v = robjects.FloatVector(x) t = robjects.r['ts'](v) fit = robjects.r['auto.arima'](t) next = robjects.r['forecast'](fit,h=1) 

Es ist klar zu wissen, dass ich ein einfaches Beispiel für die Verwendung von Arima zur Analyse Zeit Seires.Wenn ich die nächste bekam, fand ich, dass es ein ListVector war. Dann habe ich Codes als folgen, um den Wert, den ich wollte.

  count = len(next) - 2 #ListVector->FloatVector->Float print next.rx('mean')[0][0] 

Wer weiß, ob diese Methode für Sie wirksam ist oder nicht, versuchen Sie es einfach

  • Rückkehr Vektor <Paar <int, int >> & von c ++ Methode zur Python-Liste der Tupel mit Swig-Typkarte
  • Wie man Vektor in Spalten aufteilt - mit PySpark
  • Boost.python expose Funktion, die Vektor <MyClass> zurückgibt
  • Plot Entscheidungsgrenze matplotlib
  • Leere Matrix erstellen Python
  • Wie funktioniert diese ein-heiße Vektor-Konvertierung?
  • Python numpy euklidische Distanzberechnung zwischen Matrizen von Zeilenvektoren
  • Übergeben der Python-Liste auf C ++ - Vektor mit Boost.python
  • Python: Differenzierung zwischen Zeilen- und Spaltenvektoren
  • Vektor / Zeile aus Polarkoordinaten
  • Python + maya: Y-Achse drehen, um Vektor zu sein
  • Python ist die beste Programmiersprache der Welt.