No BSD License  

Highlights from
MATLAB R-link

4.57143

4.6 | 28 ratings Rate this file 145 Downloads (last 30 days) File Size: 127.41 KB File ID: #5051

MATLAB R-link

by Robert Henson

 

01 Jun 2004 (Updated 08 Jun 2004)

Functions for calling the statistical package R from within MATLAB.

| Watch this File

File Information
Description

A COM based interface that allows you to call R functions from within MATLAB. The functions are:

openR - Connect to an R server process.
evalR - Run an R command.
getRdata - Copies an R variable to MATLAB.
putRdata - Copies MATLAB data to an R variable.
closeR - Close connection to R server process.
Rdemo - An example of using R from withing MATLAB.

Acknowledgements
This submission has inspired the following:
saveR
MATLAB release MATLAB 6.5 (R13)
Other requirements Windows Only. You will need a local installation of R and you will also need to install the R-(D)COM interface from http://lib.stat.cmu.edu/R/CRAN/other-software.html or other CRAN mirror site.
Tags for This File  
Everyone's Tags
Tags I've Applied
Add New Tags Please login to tag files.
Comments and Ratings (61)
07 Oct 2004 avneet singh

works like a charm

27 Apr 2005 Beat Huggler

Easy to install!

07 Dec 2005 Yuri K

Works great. Any way to get structures and data frames from R?

13 Mar 2006 Matlab User

gave me a lot of power (huge statistical package) that can be easily used in Matlab
code.

22 Mar 2006 Pierre Lebrun

easy to install, add extreme power to matlab, especially when using models (regression etc.) mixing both qualitative and quantitative variables.

04 Apr 2006 David Dabin

A very good tool for statisticians who want more than just the statistical toolbox of Matlab...

21 Apr 2007 Kish AS  
03 Jun 2007 qiao nan

Excellent!

20 Jun 2007 Xuejian Xiong

It is a great tool.
However, I got the following error message when using the closeR function:
"Cannot close R session. Error: The remote procedure call failed."
I use Matlab(R2006a), R(2.2.1), and RSrv250. Seems like it is a bug?

10 Jul 2007 e k

An excellent set of functions that works beautifully under 2000 & XP.

02 Jan 2008 Klaus Maresch

I have the same problem.
"Cannot close R session. Error: The remote procedure call failed."
I use Matlab 6.5.0.180913a (R13), and RSrv250. Seems like it is a bug?

13 Feb 2008 Lourdes Pelayo

The interface is very nice. I can call R from MATLAB and get the results very easily.
But how can I run a complete program code in R from Matlab?
I have several loops in my R code. Besides I don't want to type all my R code in every evalR instruction.
Thanks

24 Mar 2008 John Smith  
03 Apr 2008 zhang hui

I just find this today !!!!I will use it before make some comment on it

05 Apr 2008 zhang hui

 I can read the matrix "vocano" in R command window, but I can't read out "vocano" in using volcano = getRdata('volcano') in matlab; what's wrong with it ?
thanks

07 May 2008 firdaus janoos

excellent package. makes the hideously designed R usable by general engineers.

04 Jun 2008 Bryan Grenfell

Fantastic idea and potentially very useful.. Worked well initially, now having trouble (a) moving regression output (eg residual vector) back to Matlab correctly; (b) a simple correlation of 2 vectors in gives lots of 'ActiveX errors'...

11 Jun 2008 sb mmth

is there a way to make it work with MAC OS ?

12 Jun 2008 shiun shiau

I have the same problem. I can't read out "vocano" and the error message is "Invoke Error, Dispatch Exception". What's wrong with it? Thanks.

24 Jun 2008 Boris Danev

Very helpful API for R. It saved me lots of work. Thank you.

24 Jul 2008 May Tan

R_lInK_hANdle.SetSymbol does not work for me.
Could someone help?

27 Aug 2008 Ankur P

Great way to make use of some important R commands in MATLAB. Thanks a lot!

01 Sep 2008 Maya Neytcheva

A great idea! However did not work for me.
I tried it under unix and linux. The complain is that 'actxserver' is not found.
Am I blind for something obvious?
Is it only for Windows-users?
A comment will be appreciated.

19 Sep 2008 xiaofeng dai

This package looks brilliant, but I can not get it work, matlab always complain "Server creation failed. Invalid ProgID 'StatConnectorSrv.StatConnector'" although I have instaledl the R-(D)COM interface. What is the problem?

04 Dec 2008 Anthony Kendall

Very handy and lightweight set of functions. Thank you!

To answer some questions:
1) actxserver is a MATLAB function found only in Windows
2) make sure you install the R-(D)COM interface, paying attention to the instructions about setting your R_HOME and PATH variables in the environment variables for your system. I received this same error, but once I restarted my machine and set the paths (and restarted MATLAB) it worked just fine.

06 Feb 2009 Patrick Tai

Wonderful tool, I have been using it for almost a year, thank you.
Is there a way to call R (from MATLAB) so that R runs in the background?
R is called via a MATLAB UI command button. The R function may take a long time. When waiting, the MATLAB UI stops refreshing, which leads to ugly displays if the UI windows are moved around. I hope, by calling R in the background, this will be addressed.
Thank you.
Patrick Tai.

24 Feb 2009 necati

Hi,
First of all i want to thank to all developer in such a tool. It seems very useful to me.

However, can you please help me about setting the R_HOME and PATH variables? I can not connect Matlab and R still.

Thanks.
Necati Sekkeli

24 Feb 2009 Patrick Tai

If your R-link files (openR etc.) are in folder D:\R\Rlink, then add the following path to MATLAB:

D:\R\Rlink

How do you add a MATLAB path? To find out, enter command in MATLAB
>> doc path

12 Mar 2009 seonjoo irncjbra

It works at XP but when I tried to use at Vista, it did not work. Do I need extra step to make it work? Or openR is not for vista?

02 Jun 2009 Sophie

Hi!
I installed R (R2.9.0.exe) on my pc (windows), I installed Scilab DCOM interface. And I downloaded your Matlab R-link and put the folder path where it is stored in the path of Matlab but I still get this error while using openR:
Problem connecting to R: Error using ==> actxserver at 91
Server creation failed. Invalid ProgID 'StatConnectorSrv.StatConnector'

Any idea what I miss? what I am doing wrong?
Thanks in advance for your help

02 Jun 2009 Sophie

I added R_HOME in the environment variables but still I have the following error:
??? Error: Object returned error code: 0x80040013

when the code is calling: R_lInK_hANdle.Init('R');

13 Jun 2009 Martin Heroux

Overall, it seems like this will add a great deal of versatility to Matlab. Unfortunately, the documentation is very succinct and I am having difficulty getting even basic statistical tests to give me an output in Matlab.

% Running a simple K-S test to determine whether two samples have the same distribution
a = rand (100,1); % creating a random signal
i = pi/100 :pi/100: pi;
b = (sin (i))' + a; % creating second signal

% Putting both signals into R
putRdata('a',a);
putRdata('b',b);

% Running ks.test in R and retrieving the output
evalR ('output <- ks.test(x, y)')
getRdata ('output')

%%%%%

I can run this code in R and get the output from the statistical test. However, when I try to get the R data (getRdata), Matlab give me the following error message:

Error using ==> getRdata at 47 Could not get output.
Invoke Error, Dispatch Exception: There is no connection for this connection ID

Any suggestions on how to get the output into Matlab.

Cheers

24 Jun 2009 Mike

i had a similar problem to sophie. I downloaded the package rscproxy to my R installation and the problem went away.

28 Jul 2009 Samuel Maistre

How can i load R packages? I tried evalR('library(...)') but it doesn't seems to work.

02 Sep 2009 Patrick Tai

I want to launch R from MATLAB.
I have been using R2.7.0 and DCOM Server 2.5.0 successfully.

I want to upgrade R to 2.8.0 (and later 2.9.2) and I realize that I have to change the DCOM Server. I did the following:
1. Downloaded and installed R 2.8.0 from http://cran.r-project.org/bin/windows/base/old
2. Changed Window system path to point to R-2.8.0/bin
3. Downloaded and installed R_Scilab_DCOM3.0-1B5.exe from http://cran.r-project.org/bin/windows/base (took all options)
4. Installed R package rscproxy_1.3-1.zip from http://cran.r-project.org/web/packages/rscproxy/index.html

I rebooted the computer and run statement openR in MATLAB, a Visual C++ Runtime error box appears, with error message:

Also, I ran the provide (D)COM Server test (Server 1 – Basic Test) from the Windows Start button. In the popped up Window “StatConnector Test”, I click “Start R”, and I got the Visual C++ Run-time error message:
Program: C:\...\Statco~1.exe abnormal program termination.
When error dialog box is OKed, the error “Initializing R .. Function call failed” appeared in the StatConnector Test window.

As a result to this, MATLAB failed to run openR, resulting in a similar Visual C++ Runtime error.

Thanks for help.
Patrick Tai.

18 Sep 2009 Jeremy

Rproxy.dll is no longer installed by R-2.9.2. Install the rscproxy package from CRAN. Copy C:\Program Files\R\R-2.9.2\library\rscproxy\libs\rcsproxy.dll to C:\Program Files\R\R-2.9.2\bin\Rproxy.dll, and it seems to work.

20 Oct 2009 Jianglin MA

Reply to Martin Heroux:
You can change your code in this way, and it will work.
%%
status = openR;

% Running a simple K-S test to determine whether two samples have the same distribution
a = rand (100,1); % creating a random signal
i = pi/100 :pi/100: pi;
b = (sin (i))' + a; % creating second signal

% Putting both signals into R
putRdata('a',a);
putRdata('b',b);

% Running ks.test in R and retrieving the output
evalR ('output <- ks.test(a, b)')
getRdata ('output')

closeR;

18 Nov 2009 Massimo

Hi all,
is there a way to use Rlink on a unix server?
thanks

09 Dec 2009 J. PV

I am using Matlab 7.8.0 (R2009b) and R version 2.9.0 in Windows XP and it does not work. I have tried all the recomendations above and nothing works, I get the message:
??? Error using ==> openR at 68
Cannot connect to R.
Error: The remote procedure call failed.
Thanks

01 May 2010 Daniel

I' really looking forward to master this application! very useful!
I have a problem to execute some R commands. Although the demo is running properly, I get an error message when I try to execute the following commands:
status = openR;
evalR('install.packages("bcp")')
evalR('library("bcp")')
evalR('data("RealInt")')
evalR('n <- length(RealInt)')
evalR('bcp.ri <- bcp(as.vector(RealInt), p0 = 0.1)')
closeR;
If I run the same commands in R, it works, but Matlab gives me the following errors for every command after the second line:

Error using ==> evalR at 58
Problem evaluating command library("bcp").
Invoke Error, Dispatch Exception: L'objet est statique; l'opération n'est pas
autorisée

Any idea why or how can I fix it? Thank you.

07 May 2010 BD Knight

I just wrote up a "how to" on how to get this running, you can find it <a href="http://neurochannels.blogspot.com/2010/05/how-to-run-r-code-in-matlab.html">here</a>;.

07 May 2010 BD Knight

Sorry I thought the above would accept html:

http://neurochannels.blogspot.com/2010/05/how-to-run-r-code-in-matlab.html

10 May 2010 BD Knight

Daniel you should install the bcp library in R, not from Matlab. That is likely your problem. When you install a package in R you need to specify a mirror site and such. So go to R, enter
>install.packages("bcp")
Finish installing, and then you should be able to work in Matlab.

26 Jul 2010 Renoir Vieira

Hi! Wonderful idea! I wish I have had that idea myself. Listen guys, Im having problems to run certain commands like the ones to get the coefficients of a regression inside matlab, eg.
evalR('test<-lm(y~x)');
evalR('coef<-as.matrix(test$coefficients)');
Coef=getRdata('coef');

it returns: ??? Error using ==> getRdata at 47
Could not get as.matrix(test).
Invoke Error, Dispatch Exception: Nicht initialisiertes Objekt

Any ideas?

Thanks a lot.

11 Aug 2010 Sai Santosh

Hi,
I keep getting the "The remote procedure call failed." in Matlab R2009A with R.2.7.2. Added R_HOME and pointed the PATH to bin dir of R. The rscproxy.dll is also present in the bin directory. What is the solution for this?

28 Sep 2010 Leah  
01 Oct 2010 Francois De Graux

hi Daniel
i got the same problem,this is the solution(it seems working):
load your package in R before using Matlab
type evalR('library("bcp")') in Matlab and it should work

i got another problem,i got the following message:
Invoke Error, Dispatch Exception: La classe source de l’objet lié a été modifiée
In english:Invoke Error,Dispatch Exception,Source class from object has been modificated
if anyode could help,thanks a lot !

31 Jan 2011 Grega

Just thought somebody will find this useful, as it took me about 2 hours to figure it out.

The D-Com interface doesnt work with the newest version of R (2.12.2). However, it works with version 2.9.2.

03 Feb 2011 Ed

So just wondering if somebody figured out the solution to this:
Invoke Error, Dispatch Exception: Object is static; operation not allowed

This simple line of code works from R but not when called from Matlab:
m <- ar.ols(x,FALSE,1);

Otherwise the DCom connection works fine and server passes all the tests.

Comments appreciated.

11 Feb 2011 Max

As now R version is 2.12.1, here is my solution.
for a clean install R, install package rscproxy (ver 1.3-1), and http://rcom.univie.ac.at/download/current/statconnDCOM.latest.exe (ver 3.1-2B7)
then Start->All Programs->statconn->DCOM->Server01 – Basic Test, to verify that everything is working.

now back to matlab (R2010b), run the following code

hr = actxserver('StatConnectorSrv.StatConnector');
hi = hr.invoke;
%fire up R
hr.Init('R');
% Push data into R
a = 1:10;
hr.SetSymbol('a',a);
% Run a simple R command
b = hr.Evaluate('a^2')
% Run a series of commands and grab the result
hr.EvaluateNoReturn('b <- a^2');
hr.EvaluateNoReturn('c <- b + 1');
c = hr.GetSymbol('c')
% Close the connection
hr.Close

which will produce
b =

     1 4 9 16 25 36 49 64 81 100

c =
     2 5 10 17 26 37 50 65 82 101

note that
 hi = hr.invoke

hi =

                    Init: 'void Init(handle, string)'
                    Close: 'void Close(handle)'
            GetSupportedTypes: 'int32 GetSupportedTypes(handle)'
                    GetSymbol: 'Variant GetSymbol(handle, string)'
                    SetSymbol: 'void SetSymbol(handle, string, Variant)'
                    Evaluate: 'Variant Evaluate(handle, string)'
             EvaluateNoReturn: 'void EvaluateNoReturn(handle, string)'
                   GetErrorId: 'int32 GetErrorId(handle)'
                 GetErrorText: 'string GetErrorText(handle)'
            AddGraphicsDevice: 'void AddGraphicsDevice(handle, string, handle)'
         RemoveGraphicsDevice: 'void RemoveGraphicsDevice(handle, string)'
        SetUserInterfaceAgent: 'void SetUserInterfaceAgent(handle, handle)'
     SetCharacterOutputDevice: 'void SetCharacterOutputDevice(handle, handle)'
               SetErrorDevice: 'void SetErrorDevice(handle, handle)'
             SetTracingDevice: 'void SetTracingDevice(handle, handle)'
         GetServerInformation: 'string GetServerInformation(handle, InformationType)'
      GetConnectorInformation: 'string GetConnectorInformation(handle, InformationType)'
    GetInterpreterInformation: 'string GetInterpreterInformation(handle, InformationType)'

Remarks
1 the rcom package for R is not necessary
2 we dont need the "MATLAB R-link" to wrap the com automation.

22 Feb 2011 Patrick Tai

Max:
Windows XP SP3.
Installed new R2.12.1; installed package rscproxy_1.3-1.zip
Installed StatconnDCOM1.3-2B7
Modified Windows path to contain path of R.exe
Ran Server01 – Basic Test.
Got error:
"Load Statconnector Server ... Done
Initializing R function call failed Code -2147221485
Text installation problem: unable to load connector"
Also got a Error dialog box with message:
  "Test 1 Method ~ of object ~ failed"
Please help.
Thanks.

25 Feb 2011 Patrick Tai

Windows XP SP3.
I have several versions of R. I put one of them in the Windows path, say 2.9.2.
However, when the MATLAB code runs openR, the version of R opened is different. I determine that by doing: evalR('v = version') and getting the components.
How do openR determine which R to open.

03 Mar 2011 Suru Polade

I have problem with R-link
when i try to connect to R using
openR

in Matlab i get following error
??? Error using ==> openr
Cannot connect to R.
Invoke Error, Dispatch Exception: The media is write protected

can someone help me to solve this error

I am using
Matlab 6.5
R 2.12.2

04 Mar 2011 Edward

I get the same error that Patrick reported on 2-25. I am using R2.10.1. I think I have followed all the instructions. 1. Install rscproxy,
2. set path for matlab_rlink in matlab, 3. installed dcom server, 4. placed sciproxy.dll file in bin folder (I have tried in the matlab bin folder and in the dcom bin folder as well)

What am I doing wrong?? I really would like to get this connection working.

Thanks all.

Loading StatConnector Server... Done
Initializing R...Function call failed
  Code: -2147221485
  Text: installation problem: unable to load connector
Releasing StatConnector Server...Done

>> Rdemo
??? Error using ==> openR at 68
Cannot connect to R.
Error: Object returned error code: 0x80040013

Error in ==> Rdemo at 6
openR

06 Mar 2011 Edward

Well I reinstalled everything and did not set the R_HOME environment variable. Now the Statconn server test program works OK. When I type Rdemo it works fine, but after getting the volcano data, when I type volcano it returns volcano =

     []

When I try any of the other demo tests, I get

putRdata('a',a)
??? Error using ==> putRdata at 47
Could not put data.
Attempt to reference field of non-structure array.

Any suggestions??

04 May 2011 Kemp

Here is a package called RAndFriends. It will install R and dcom.
http://rcom.univie.ac.at/

16 Nov 2011 Anto

I also can't read out "vocano" in matlab using volcano = getRdata('volcano'). Any idea?

08 Dec 2011 Chris L'Esperance

I am among those who report the error:

Invoke Error, Dispatch Exception: Object is static; operation not allowed

I am able to run this:

openR
a = 1:10;
putRdata('a',a)
b = evalR('a^2')
evalR('b <- a^2');
evalR('c <- b + 1');
c = getRdata('c')

without error, yet, upon running a function from the package known as `seacarb' I get the aforementioned error. I don't suppose anyone has made progress with this?

Chris

14 Dec 2011 Darryn

I'm assuming you wouldn't be able to publish a Matlab program (using the compiler) using the R link?

10 Jan 2012 Graham Johnson

Seems to me that only functions which don't require a data.frame type object work with this link. Eg, if I want to set up a regression, then project it over new data using the 'predict' function in R - no joy (I just get the fitted values over the original data).

Also, fitting a regression with categorical variables - no joy.

Can anyone confirm for me whether this is right please? I'd be very happy if I was wrong and I just need to change something in my set up to achieve the above.
G

08 Feb 2012 Sébastien Dubuis

Hi,

I had the same problem as others. My command was:

a=[1,1,1,2,2,2,3,3,4,4];
b=[1,1,1,2,2,2,3,3,4,4];
putRdata('a',a)
putRdata('b',b);
evalR('c<-fisher.test(a,b)$p.value')

And the result was the error:
'Problem evaluating command c<-fisher.test(a,b)$p.value.
Invoke Error, Dispatch Exception: Object is static; operation not allowed'

My solution was to 'write' down the command to add the data. Then it worked perfectly.
In my case:

X=num2str(a);
X=strrep(X,' ',',');
eval(['evalR(''a<-c(' X ')'')'])
X2=num2str(b);
X2=strrep(X2,' ',',');
eval(['evalR(''b<-c(' X2')'')'])
evalR('c<-fisher.test(a,b)$p.value')

I thought this (ugly) trick might help some people here.

Sébastien

Please login to add a comment or rating.
Updates
08 Jun 2004

Added a "published M-file"

Tag Activity for this File
Tag Applied By Date/Time
statistics Robert Henson 22 Oct 2008 07:21:27
probability Robert Henson 22 Oct 2008 07:21:27
r cran Robert Henson 22 Oct 2008 07:21:27
statistics Rizwan 13 Oct 2011 13:20:28

Contact us at files@mathworks.com