horcle_buzz - 1 year ago 85

Python Question

In R, I can run plot and curve to get the relationship between a predicted probability and the predictor variable by just running:

`plot(outcome~survrate, data = d, ylab = "P(outcome = 1 |`

survrate)", xlab = "SURVRATE: Probability of Survival after 5

Years", xaxp = c(0, 95, 19))

curve(transform(coef(mod1)[1] + coef(mod1)[2]*x), add = TRUE)

Where transform is a custom R function.

I am trying to do the same thing in rpy2, and so far have the following:

`rplot = ro.r('plot')`

formula = Formula('outcome~survrate')

formula.getenvironment()['outcome'] = r_analytical_set.rx2('outcome')

formula.getenvironment()['survrate'] = r_analytical_set.rx2('survrate')

ro.r.plot(formula, data=r_analytical_set, ylab = 'P(outcome = 1 | pass)', xlab = 'SURVRATE: Probability of Survival after 5

Years', xaxp = ro.r.c(0, 95, 19))

# read in R function from file

with open('/Users/gregsilverman//development/python/rest_api/rest_api/utils.r', 'r') as f:

string = f.read()

from rpy2.robjects.packages import STAP

invlogit = STAP(string, "invlogit")

ro.r.curve(transform(ro.r.coef(fit)[0] + ro.r.coef(fit)[1]*ro.r.x), add = True)

In this state,

`ro.r.curve`

`TypeError: unsupported operand type(s) for *: 'float' and 'FloatVector'`

So, as per this multiplying all elements of a vector in R, I ran

`ro.r.curve(transform(ro.r.coef(fit)[0] + ro.r.prod(ro.r.coef(fit)[1],ro.r.x)), add = True)`

But, now I am getting an error

`TypeError: unsupported operand type(s) for +: 'float' and 'FloatVector'`

Before I waste any more time figuring out how to add a scalar to a vector, I was wondering if there was a more efficient way of achieving my end goal.

Recommended for you: Get network issues from **WhatsUp Gold**. **Not end users.**

Answer Source

Use the accessor "R-operator" (`.ro`

- see http://rpy2.readthedocs.io/en/version_2.8.x/vector.html#operators):

```
In [1]: from rpy2.robjects.vectors import FloatVector
In [2]: FloatVector((1,2,3)).ro + 2
Out[2]:
R object with classes: ('numeric',) mapped to:
<FloatVector - Python:0x7fde744c0308 / R:0x44db740>
[3.000000, 4.000000, 5.000000]
```