version 1.1.0.1 (129 KB) by
Robert Henson

Functions for calling the statistical package R from within MATLAB.

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.

Robert Henson (2021). MATLAB R-link (https://www.mathworks.com/matlabcentral/fileexchange/5051-matlab-r-link), MATLAB Central File Exchange. Retrieved .

Created with
R13

Compatible with any release

**Inspired:**
saveR, Kaplan Meier for right and/or left and/or interval censored data, SUBSYNCHRONOUS RESONANCE, MatEx - Matlab extremes

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!Create scripts with code, output, and formatted text in a single executable document.

Jiahao LiuI think this file helps me a lot ! Thx!

zmi zmimacOS and Linux should be removed from Platform Compatibility

stonePingshe ChenPingshe ChenPingshe ChenBLPI have to conduct statistical analysis for a quite large set of data spread over multiple MAT-files (v7.3). Unfortunately, the Statistics and Machine Learning Toolbox is not sufficient for me, and R seems to be the best solution. I am trying to use my data in R without the need to convert the variables to CSV-files. MATLAB R-Link looks promising, but ...

1. I was unable to download the latest version of the R(D)COM interface. Can I use the R_Scilab_DCOM3.0-1B5.exe still available from https://cran.r-project.org/contrib/extra/dcom/ ? I am working under W10.

2. I have found another solution for interfacing R and MATLAB which is using Rserve. Sorry for the laic question, but how is the solution with COM interface better than that with TCP/IP server?

Jan KamenikWhen you get the Invoke Error, Dispatch Exception: Object is static; operation not allowed error, you have probably forgotten to load whatever package your function requires -- try for example: library(lhs)

dawaskeEven though I followed MJs instructions I still couldn't get the MATLAB R-Link to work :( I'm running MATLAB R2014b and was trying to link it to a freshly installed R v3.1.0 (SDI), with rscproxy v2.0.5 and R-(D)COM v3.0-1B5. Yet I keep getting the following error message when trying to connect to an R server process in MATLAB using the openR-command:

Error using openR (line 68)

Cannot connect to R.

Error using COM.StatConnectorSrv_StatConnector/Init

Error: Object returned error code: 0x80040013

Also, the StatConnector Test is giving me an error:

Loading StatConnector Server... Done

Initializing R...Function call failed

Code: -2147221485

What am I doing wrong?

Yi PanTom HawkinsThe R-(D)COM interface required by this code is not free for commercial use. Possibly because of this, it is no longer available from CRAN, so the 'Requires' text above needs updating.

alice zhangIt worked well in most cases.

but when I used evalR to get child element(for example:evalR('a<-out$b'),It returns nothing in matlab.

how to solve this problem?

PhilippeDoes it work on Linux?

MartinWorks like a charm, thanks!!

MartinAlessandro MuscoloniThe MATLAB R-link worked very well in most of the cases, but sometime I get a strange error in putRdata.

For example, I try to put a matrix 34x34 of double numbers and it works, then I try to put a matrix 156x2 of double numbers and the execution of the following line fails:

R_lInK_hANdle.SetSymbol(varname,data);

with the following exception message:

MException with properties:

identifier: 'MATLAB:COM:E0'

message: 'Error: The server threw an exception.

Do you have an idea about what could cause the error?

Thanks!

SophieI get the same error message as fawasaa (Loading StatConnector Server... Done

Initializing R...Function call failed

Code: -2147221455

Text: licensing: license expired

Releasing StatConnector Server...Done)

although I followed the latest installation recommendation ("R needs to be installed with the SDI display option..."). Is there a solution to it?

fawasaaTENGFEIAfter installing R 3.1.0 and matlab 2012a, I find it reported

Error using COM.StatConnectorSrv_StatConnector/Init

Error: Object returned error code: 0x80040013

Donot know why

HamidI want to link the ieee 14 bus data and solve by using newton rapson method,

LaetitiaI have a problem doing

evalR('gfit = garch(ddta, order=c(1,1))')

evalR('garchcoef = coef(gfit)')

garchcoef = getRdata('garchcoef');

The garchcoef are not the same im matlab than in R. Do you know why ?

Thanks for your help,

Krzysztof Fajstso does it connect to existing R session or creates a new one ?? I think It creates a new one as it was working without starting R.

Is it possible to connect to existing R seession ??

MarcSo, I'm just beginning to use this and running into some trouble. The install worked fine but I am having issues using the evalR() function to source a function I have saved to disk. First, I attempted to write the code:

[RESULT, STATUS, MSG] = evalR('source('~/R functions/makerm function.R')');

however this provides an error in matlab itself because the portion of the code between the apostrophes of the evalR(‘ ‘) statement does not permit the entire command to be sent to R, specifically the 'source('~/R functions/makerm function.R')' portion of the command is what I want to execute in R. So, I tried the typical matlab method of adding an extra apostrophe within the text to make apostrophes actually read as apostrophes rather than as indicators of groupings within the command. I used the code:

[RESULT, STATUS, MSG] = evalR('source(''~/R functions/makerm function.R'')');

this runs however in the MSG output variable it says

"Error using COM.StatConnectorSrv_StatConnector/Evaluate Invoke Error, Dispatch Exception: There is no connection for this connection ID".

I am not sure as to what connection the error is talking about but I know that the DCOM connection is working since the Rdemo.m runs fine and I am able to send and compute things in my own scripts.

Ultimately, I'm trying to get R functions that I have created and saved on my hard drive to be accessible and used when I send data from Matlab to R. Thanks for any help you can give me regarding how to source a function via the matlab R link interface.

ThomasAfter several issues regarding statconnector I installed randfriends, the dcom prog and my R, then reinstalled R, ran it as admin and installed the dcom from R. Works fine now.

JR KingSame as above: not working for Linux?

YanThanks to Cary, it seems that RAndFriends can finally solve the 0x80040013 error.

YanCary OpelDCOM does not work with the 64bit version of R, when I tried I got the 0x80040013 error.

Everything worked fine when I downloaded and installed RAndFriends from scratch with all default settings.

weijieHi, I got a error message:

Error using openR (line 68)

Cannot connect to R.

Error using COM.StatConnectorSrv_StatConnector/Init

Error: Object returned error code: 0x80040013

Would you please tell me what's the problem here?

HAfter installing both R (i386 2.12.2) and DCOM I ,I run Rdemo.ok!

for some reason I must call user-defined Rfunction with parameter called FindU.wRef .in my case:

s2='MissingValueCode="-999.0"'

s3='p.lev=0.95'

openR

putRdata('s2',s2)

putRdata('s3',s3)

evalR('FindU.wRef(s2,s3,)')

closeR

in Matlab i get following error

Error using evalR (line 58)

Problem evaluating command FindU.wRef(s2,s3).

Error using COM.StatConnectorSrv_StatConnector/EvaluateNoReturn

Invoke Error, Dispatch Exception

i try many times,but i cann't solve this problem.what do i do in case? Any idea why or how can I fix it? Thank you.

HAfter installing both R (i386 2.12.2) and DCOM I ,I run Rdemo.ok!

for some reason I must call user-defined Rfunction with parameter called FindU.wRef .in my case:

s2='MissingValueCode="-999.0"'

s3='p.lev=0.95'

openR

putRdata('s2',s2)

putRdata('s3',s3)

evalR('FindU.wRef(s2,s3,)')

closeR

in Matlab i get following error

Error using evalR (line 58)

Problem evaluating command FindU.wRef(s2,s3).

Error using COM.StatConnectorSrv_StatConnector/EvaluateNoReturn

Invoke Error, Dispatch Exception

i try many times,but i cann't solve this problem.what do i do in case? Any idea why or how can I fix it? Thank you.

DBSSébastien DubuisHi,

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

Graham JohnsonSeems 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

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

Chris L'EsperanceI 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

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

EdwardWell 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??

EdwardI 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

Suru PoladeI 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

Patrick TaiWindows 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.

Patrick TaiMax:

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.

EdSo 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.

GregaJust 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.

Francois De Grauxhi 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 !

LeahSai SantoshHi,

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?

R VieiraHi! 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.

Eric TDaniel 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.

DanielI' 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.

J. PVI 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

MassimoHi all,

is there a way to use Rlink on a unix server?

thanks

Jianglin MAReply 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;

JeremyRproxy.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.

Patrick TaiI 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.

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

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

Martin HerouxOverall, 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

SophieI 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');

SophieHi!

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

seonjoo irncjbraIt 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?

Patrick TaiIf 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

necatiHi,

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

Patrick TaiWonderful 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.

Anthony KendallVery 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.

xiaofeng daiThis 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?

Maya NeytchevaA 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.

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

May TanR_lInK_hANdle.SetSymbol does not work for me.

Could someone help?

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

shiun shiauI 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.

sb mmthis there a way to make it work with MAC OS ?

Bryan GrenfellFantastic 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'...

firdaus janoosexcellent package. makes the hideously designed R usable by general engineers.

zhang huiI 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

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

John SmithLourdes PelayoThe 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

Klaus MareschI 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?

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

Xuejian XiongIt 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?

qiao nanExcellent!

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

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

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

code.

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

Beat HugglerEasy to install!

avneet singhworks like a charm