Executing R files from inside Python using PypeR

765 Views Asked by At

My current work project is on writing a Python program that must at various points rely on R. Since I don't know R so well, and the person helping me doesn't know Python so well, the actual R code is not in my program. Instead, he opened Notepad, put the R code in there, and saved it as (name).r. When executed, the output is written into a txt file, which Python can then read.

All I have to do is ask Python to ask R to run (name).r

I've tried using subprocess.run. That worked for awhile, and then for some unknown reason stopped working and now does nothing. Then I tried using rpy2, which also worked for awhile; but now it looks like the installation is broken and I'm having trouble getting it reinstalled.

I'd like to give a 3rd option a try now: PypeR. I used pip install pyper. Looked like it was successful.

To keep things simple, I opened Notepad and typed in the following, and saved it as hello.r:

message <- 'goodbye'
write.table(message,'C:/Users/(my name)/Desktop/(folder)/goodbye.txt',row.names=FALSE,col.names=FALSE)

Manually opening R and copy-pasting the lines in one-at-a-time does indeed work. But I'm having trouble getting it to work from Python. Here are some things I've tried (I always put import pyper at the top):

pyper.runR("source('C:/Users/(muy name)/Desktop/(folder)/hello.r')")

This gives NameError: name 'dump_stdout' is not defined

pyper.R("source('C:/Users/(my name)/Desktop/(folder)/hello.r')")

This gives FileNotFoundError: [WinError 2] The system cannot find the file specified

r=pyper.R("C:/Program Files/R/R-3.4.1/bin/i386/Rgui.exe")
r("source('C:/Users/(my name)/Desktop/(folder)/hello.r')")

This causes RGui to open up with a blank R Console. And then nothing happens. When I click back to Python, the console shows Python is busy until I click the halt button, whereupon I get "OSError: [Errno 22] Invalid argument

What is the correct way to execute hello.r?

Thank you

1

There are 1 best solutions below

0
On

Looks like I got it. This works:

r=pyper.R(RCMD="C:/Program Files/R/R-3.4.1/bin/R")
r.run("source('C:/Users/(my name)/Desktop/(folder)/hello.r')")