2017-09-23 9 views
0

Meine Frage ist einfach, ich versuche, einen Datenpunkt eine ganze Zahl von Python nach R zu transportieren. Der Grund dafür ist, weil ich R-Funktionen in R verwenden möchte, die Ausgabe dann für die Plot-Transformation in Python zurücktransformieren.Python: Wie man mit numpy2ri nur eine Variable (Zahl/Integer) zu R bringt?

Ich habe dies mit Arrays getan, es funktioniert gut, aber nicht mit einem Punkt-Array. Betrachten Sie das einfache Beispiel.

Das folgende Beispiel funktionieren

import rpy2.robjects as robjects, pandas as pd, numpy as np 
    from rpy2.robjects import r 
    from rpy2.robjects.numpy2ri import numpy2ri 
    from rpy2.robjects.packages import importr 

    r_p1= numpy2ri(np.array((1,1))) 

Kein Problem! Allerdings, wenn r_p1= numpy2ri(np.array((1))) statt r_p1= numpy2ri(np.array((1,1)))

ich die folgende Fehlermeldung

--------------------------------------------------------------------------- 
RRuntimeError        Traceback (most recent call last) 
<ipython-input-5-d404ef525bdb> in <module>() 
     4 from rpy2.robjects.packages import importr 
     5 
----> 6 r_p1= numpy2ri(np.array((1))) 
     7 
     8 # df= pd.DataFrame(np.random.random((108, 2)), columns=['Number1','Number2']) 

D:\Anaconda3\lib\site-packages\rpy2\robjects\numpy2ri.py in numpy2ri(o) 
    80   #FIXME: no dimnames ? 
    81   #FIXME: optimize what is below needed/possible ? (other ways to create R arrays ?) 
---> 82   res = rinterface.baseenv['array'](vec, dim=dim) 
    83  # R does not support unsigned types: 
    84  elif o.dtype.kind == "u": 

RRuntimeError: Error in (function (data = NA, dim = length(data), dimnames = NULL) : 
    'dims' cannot be of length 0 

bearbeiten

Nur meine Frage besser zu fragen, wie ich verstanden von dort keine Möglichkeit gibt, eine eine ganze Zahl verwenden, anstatt ein Array in R.

Aber was ich wirklich brauche, ist eine Funktion in R aufrufen, die Eingabe in einer von ihnen ist eine einzelne Ziffer wie 3, oder vielleicht 21, Elemente, die in Python bestimmt sind.

Insbesondere rufe ich eine solche Bibliothek in R r('library("vars")')

Wobei ich es benutzen wollen y einige Matrix nennen 2 von 100

# Run a normal VAR model 
r("t=VAR(y, p=p1, type='const')") 

, wie Sie diesen p1 sehen kann, ist eine einzelne Zahl sagen wir 3

als r.assign("p1", r_p1) d

# Then find the summary statistics 
r('s=summary(t)') 
(die in Python ausgewählt ist)

das gibt mir diesen Fehler

RRuntimeError: Error in crossprod(resids)/obs : non-conformable arrays 

Antwort

0
np.array((1, 1)) # tuple of length 2 
np.array((1))  # literally the integer 1 
np.array((1,)) # tuple with a single element 

es auf dem dritten Beispiel Aufruf np.array((1,)) für mich gearbeitet

Diese Art von seltsam ist, denn es gibt nicht so etwas wie eine reine Zahl in R ist; Alles ist ein Vektor (manchmal der Länge 1). Soweit ich das anhand der Dokumentation feststellen konnte, ist dies der beste Weg, um eine Ganzzahl zu senden.

+0

manchmal machen es einfache Dinge wirklich schwer es herauszufinden, wenn Sie in einem großen Code sind – rsc05

+0

@ dgg Ich bearbeite meine Frage, um genauer zu sein, ich wünsche Sie können es sich ansehen. Vielen Dank – rsc05

0

Was ich wirklich tun wollte, ist, einen numerischen Wert (das ist ein Eintrag in einer Matrix) zu R zu übertragen. Der Grund dafür ist, eine ganze Zahl von Python auf eine Funktion in R zu verwenden, die eine Eingabe erfordert eine ganze Zahl. Leider führt dies zu vielen Fehlern. Um darüber zu kommen, muss man die Eingabe als String-Variable nehmen.Dies wurde als getan so

ein String-Variable definieren, die eine variable einzelne ganze Zahl in Python haben kann, wie beispielsweise

p1= int(5) # variable integer in python 
A='t=VAR(y, p='+str(p1)+', type=\'const\')' 

dann kann man einfach die Funktion VAR in R als

nennt
r(A) 

Dies wird das Rätsel lösen

Verwandte Themen