Seite 1 von 1

RPy exception beim Aufruf der R Funktion outer()

Verfasst: Freitag 27. Februar 2009, 11:54
von regor
keine Ahnung wie viele Python user RPy verwenden, aber ich suche hier trotzdem mal um Hilfe für den folgenden einfachen code (unter Python25 und R2.7), der eine exception erzeugt, die ich nicht los werde:

----------------------------------
from rpy import *

x = r.seq(-10, 10, length=60)
y = r.seq(-8, 8, length=60)
a = 1
f = r('function(x,y) { r <- sqrt(a+x^2+y^2); sin(r)/r }')
z = r.outer(x, y, f)
r.persp(x, y, z, theta = -15, phi = 35, expand = 0.5, col="blue", axes=False, box=False)
---------------------------------
Die Exception:
---------------------------------
>pythonw -u "temp.py"
Traceback (most recent call last):
File "temp.py", line 8, in <module>
z = r.outer(x, y, f)
rpy.RPy_RException: Fehler in FUN(X, Y, ...) : objekt "a" nicht gefunden

>Exit code: 1
----------------------------------

warum findet R die Variable a nicht?

Verfasst: Dienstag 3. März 2009, 13:08
von The Spirit
hi.
hab mit deinem beispiel auch mal ein wenig rumgespielt, da ich auch viel mit R und rpy arbeite.
den fehler hab ich aber auch. verstehe auch noch nicht ganz warum.
wenn ich mal ein wenig zeit habe, beschäftige ich mich nochmal damit.
meine vermutung bisher ist, das bei der definition der funktion wo ein problem ist mit der übergabe der variable a.
schonmal versucht die funktion f in zwei teilen zu schreiben?
also erstmal der hintere teil und dann die übergabe an die funktion?
is nur mal so ne idee

Verfasst: Mittwoch 4. März 2009, 10:58
von regor
Vielen Dank an "The Spirit" :D . Das hat mich auf die Idee gebracht, die Zuordnung für a in die R-Funktion zu integrieren. Außerdem war es noch notwendig, auf NO_CONVERSION umzustellen, damit die Funktion

Code: Alles auswählen

r.persp()
mit "f" was anfangen kann. Folgender Code läuft bei mir jetzt ohne exception:

Code: Alles auswählen

from rpy import *

set_default_mode(NO_CONVERSION)
x = r.seq(-10, 10, length=60)
y = r.seq(-8, 8, length=60)
f = r('function(x,y) { a <- 5; r <- sqrt(a+x^2+y^2); sin(r)/r }')
z = r.outer(x, y, f)
plot_file_name = "temp_rm01.png"
r.png(filename = plot_file_name, height = 400, width = 600)
r.persp(x, y, z, theta = -15,  phi = 35, expand = 0.5, col="blue", axes=False, box=False)