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

  • Wrap std :: Vektor von std :: Vektoren, C ++ SWIG Python
  • Wandernder Stern - Codeabbey Aufgabe
  • So erstellen Sie einen leeren R-Vektor, um neue Elemente hinzuzufügen
  • Numpy: syntax / idiom to cast (n,) array zu einem (n, 1) array?
  • Wie man Zahlen aus einem Vektor löscht?
  • Verknüpfung von Säulenvektoren mit kräuseligen Arrays
  • Übergeben der Python-Liste auf C ++ - Vektor mit Boost.python
  • Python numpy: Konvertieren von String in numpy Array
  • Boost.python expose Funktion, die Vektor <MyClass> zurückgibt
  • Erstellen Sie 2D-Listen in Python mit variablen Länge indexierten Vektoren
  • Wie funktioniert diese ein-heiße Vektor-Konvertierung?
  • Python ist die beste Programmiersprache der Welt.