在Matlab中调用R
一直往返于Matlab与R之间进行编程,今天发现原来有办法直接用Matlab调用R,
具体如下:
Calling R from MatlabThis uses the COM interface, so only works on Windows.
Install R.2.7.0 or newer. Make sure R.exe is in your windows path.
Install and run the Rcom server
Reboot matlab and put the following m-files in your path
Optional: in R-2.7.0\bin make a file called "R.init" which contains startup commands, such as library(glasso)
In matlab, type Rdemo. This should display b = 1 4 9 16 25 36 49 64 81 100c = 2 5 10 17 26 37 50 65 82 101
You can also call R as a subprocess as follows !R --no-save # at the matlab promptq() # at the R prompt to quit.
Trouble shooting
If it's not working make sure the Dcom service is running under Control Panel --> Administrative Tools --> Services --> DCOM Server Process Launcher. You can start the service by right clicking and selecting 'start', (unless of course its already running) and have it always start on reboot by double clicking and changing the startup type to automatic.
The Rsvr install creates a bunch of shortcuts under the R program folder on the start bar. One of these, "server 01 Basic Test" will test the connection to R - if that works we know the problem is between Matlab and Dcom and also unlikely to be a firewall problem.
ExampleA matlab wrapper to the glasso function.function precMat = glassoR(C, rho, useMBapprox)% Use L1-linear regression to find markov blankets and then Lambda.% Uses R code from
http://www-stat.stanford.edu/~tibs/glasso/openR;evalR('C<-1') % must pre-declare variable before writing a matrixevalR('L<-1') putRdata('C',C);putRdata('rho',rho);putRdata('useMBapprox', useMBapprox)evalR('stuff <- glasso(C,rho=rho,approx=useMBapprox)'); evalR('L <- stuff$wi') % inverse covariance matrixprecMat = getRdata('L');closeR;经过本人安装测试,发现运用开始菜单中R下的Dcom中的Server 01进行测试,无法通过,报错如下 Loading StatConnector Server... Done Initializing R...Function call failed Code: -2147221485 Text: installation problem: unable to load connector Releasing StatConnector Server...Done经查证,原来Dcom Server需要在系统的Path中能够找到rproxy.dll和R.dll两个文件,R.dll一般直接安装R时机有即有,而rproxy.dll在R2.7.0以后的版本中不再使用,变为rpcproxy.dll,而且需要手动安装
rpcproxy包才会有,安装rpcproxy包后,需要将rpcproxy.dll所在目录手动添加到系统path中,比如
我安装完后,rpcproxy.dll在C:\Program Files\R\R-2.9.0\library\rscproxy\libs中,如此步骤后,
再运行Server 01进行测试,点击StartR,一切Done!
http://hi.baidu.com/binaryfan/item/08a21b0947d30de2f45ba666