Skip to main content

interoperability - Are there any "RLink" like projects, which enable the interaction between R and Mathematica?



I want to borrow the vast amount of packages of R. I know there was one but it is neither sold nor supported anymore. So are there any active open source projects for linking R with Mathematica? Thank you.



Answer



Erich Neuwirth on MathGroup mentioned a solution for Windows (free for non-commercial applications) that you can download here.


Here is his example with small updates from Sasha and Mark Fisher. After downloading the R instalation and DCOM server stuff I tried it and it seems to work just fine.


Needs["NETLink`"]
myR = CreateCOMObject["StatConnectorSrv.StatConnector"]
myR@Init["R"]
myR@SetSymbol["xxx", 12321]
result1 = myR@GetSymbol["xxx"]
myR@EvaluateNoReturn["randmat<-matrix(rnorm(100),10)"]

rmat = myR@GetSymbol["randmat"]
result2 = myR@Evaluate["solve(matrix(1:4,2))"]

(*
==> NETLink`Objects`NETObject$3810539581$1070974657101825
*)

(*
==> 12321
*)


(*
==> {{-0.2729702674, 1.803861976, 0.5813040979, 0.1600081953,
0.7538751951, 0.3923246778, 1.240256949, 2.143071289, -0.2112634412,
0.9417189228}, {-0.1815065752, 0.6340400316,
0.6235181836, -0.1729713552, -0.965223049, -0.8076688634,
0.6125102682, 0.8043927759,
0.2623272614, -0.7300377248}, {-0.1573784247,
1.745921499, -1.223295754,
0.7508255497, -1.437158433, -0.5431748169,

0.5224185732, -0.006148655396, -0.5381351892, -0.1264029232}, \
{-0.2285349193, 0.5978044841,
0.7099844671, -0.830220449, -0.5994523393, -0.1600179795,
0.2957343203, -0.2560352574,
1.45552903, -0.9763608981}, {-0.5509826168, 0.4205191323,
2.021672968, 0.4834619721, -0.6738896365, -1.782509979, 0.515151609,
0.6698301759, -1.914440159, 0.1741606405}, {1.199489342,
1.397342011, -0.08762926484, 0.3572575699, 0.1415520058,
0.2384566775, -0.598134357, -0.199506724, -0.4849505361,
0.1238990228}, {0.55417032,

0.4911786903, -0.2432415953, -1.270176719,
0.3143047255, -0.3256634613, 0.9347990095,
0.6459510591, -0.924018154, 1.091294398}, {-0.5705422396,
0.1740525789, -0.7607604118, -0.4584603394, -2.602648464, \
-0.08879130709, 1.550124853, 0.4472847015, 0.1335582644,
0.07635818615}, {1.301494963, 1.106258178,
0.3354845242, -1.45468913, -0.3581930843,
1.187368824, -0.1503588385, 0.1511637701, 2.236312191,
1.067101554}, {0.04525815419, 0.1181913247,
1.588764281, -0.7367518216, -1.79115224, -3.891936361, 2.463525431,

2.721622641, 0.8049086131, -0.1488657311}}
*)

(*
==> {{-2., 1.5}, {1., -0.5}}
*)

myR@Close[]

Comments

Popular posts from this blog

plotting - How to draw lines between specified dots on ListPlot?

I would like to create a plot where I have unconnected dots and some connected. So far, I have figured out how to draw the dots. My code is the following: ListPlot[{{1, 1}, {2, 2}, {3, 3}, {4, 4}, {1, 4}, {2, 5}, {3, 6}, {4, 7}, {1, 7}, {2, 8}, {3, 9}, {4, 10}, {1, 10}, {2, 11}, {3, 12}, {4,13}, {2.5, 7}}, Ticks -> {{1, 2, 3, 4}, None}, AxesStyle -> Thin, TicksStyle -> Directive[Black, Bold, 12], Mesh -> Full] I have thought using ListLinePlot command, but I don't know how to specify to the command to draw only selected lines between the dots. Do have any suggestions/hints on how to do that? Thank you. Answer One possibility would be to use Epilog with Line : ListPlot[ {{1, 1}, {2, 2}, {3, 3}, {4, 4}, {1, 4}, {2, 5}, {3, 6}, {4, 7}, {1, 7}, {2, 8}, {3, 9}, {4, 10}, {1, 10}, {2, 11}, {3, 12}, {4, 13}, {2.5, 7}}, Ticks -> {{1, 2, 3, 4}, None}, AxesStyle -> Thin, TicksStyle -> Directive[Black, Bold, 12], Mesh -> Full, Epilog -> { Line[ ...

list manipulation - Selecting multiple columns from a matrix?

Sample data: data = { {{2013, 1, 1}, 24.13, 167.67, 231.82}, {{2013, 1, 2}, 32.15, 170.92, 225.99}, {{2013, 1, 3}, 35.43, 172.68, 221.67}, {{2013, 1, 4}, 36.73, 173.05, 218.32}, {{2013, 1, 5}, 58.19, 165.96, 197.05}, {{2013, 1, 6}, 69.99, 163.50, 187.52}, {{2013, 1, 7}, 71.37, 154.21, 175.58}, {{2013, 1, 8}, 72.51, 149.66, 163.25}}; I want a DateListPlot with three graphs, so for a matrix formed by columns 1 and 2, one for columns 1 and 3, and 1 for columns 1 and 4. At the moment I'm using this code: data2 = Transpose[{data[[All, 1]], data[[All, 2]]}]; data3 = Transpose[{data[[All, 1]], data[[All, 3]]}]; data4 = Transpose[{data[[All, 1]], data[[All, 4]]}]; DateListPlot[{data2, data3, data4}, Joined -> True, Filling -> {3 -> {1}}] but I have a hunch that this can be done more efficiently. I don't like the Transpose s in particular. Any ideas? edit (for extra credit) What if I need to multiply the second column by 2, which in my solution is simp...

plotting - How to draw some 2D curves in a 3D plot?

I want to plot several 2D curves ( Sin[x] at y=0 , Cos[x] at y=1 ) in a 3D plot, what function should i use? f[x_, y_] := Piecewise[{{0, y 0}, {Sin[x], y == 0}}] g[x_, y_] := Piecewise[{{0, y 1}, {Cos[x], y == 1}}] Plot3D[{f[x, y], g[x, y]}, {x, 0, 10}, {y, 0, 10}] doesn't work. Any ideas? Answer ParametricPlot3D[{{Sin[u], 0, u}, {Cos[u], 1, u}}, {u, 0, 20}, BoxRatios -> 1, PlotRange -> {{-2, 2}, {-.5, 2}, {0, 20}}] === update - general thoughts === I've seen the comments to this question and a few other approaches to the waterfall (or wire) plot are given in this question: Plotting several functions . Also I cannot not mention one of my favorite Mathematica blogs - Archery with this post on the story of discovery of 1st pulsar and an its infamous graphics - code is given in the post: