Beefy Boxes and Bandwidth Generously Provided by pair Networks
Do you know where your variables are?
 
PerlMonks  

multidimensional array in Statistics::R

by igelkott (Priest)
on Feb 07, 2013 at 13:37 UTC ( [id://1017656]=perlquestion: print w/replies, xml ) Need Help??

igelkott has asked for the wisdom of the Perl Monks concerning the following question:

It's easy enough to load scalers and simple arrays into R through Statistics::R but I'm having trouble with multidimensional arrays. The manual doesn't actually claim to support this but maybe someone has managed.

Arrays are passed to R by reference (to make a simple list in R). Passing a reference to a multidimensional array produces a list of array tags. For example:

use Statistics::R; use Data::Dumper; my @arr = qw(foo bar baz); my @mat = (["fred", "barney", "pebbles", "bambam"], ["george", "jane", "elroy", "judy"], ["homer", "bart", "marge", "maggie"]); my $R = Statistics::R->new(); $R->set('arr', \@arr); $R->set('mat', \@mat); my $r_arr = $R->get('arr'); my $r_mat = $R->get('mat'); print "Array:\n", Dumper($r_arr); print "Matrix:\n", Dumper($r_mat);
produces:
Array: $VAR1 = [ 'foo', 'bar', 'baz' ]; Matrix: $VAR1 = [ 'ARRAY(0x7fdbf4007328)', 'ARRAY(0x7fdbf4014b80)', 'ARRAY(0x7fdbf4014c58)' ];

Replies are listed 'Best First'.
Re: multidimensional array in Statistics::R
by BrowserUk (Patriarch) on Feb 07, 2013 at 14:03 UTC

    Looking at the docs, it seems like you'd have to set one vector of the multi-dimensional array at a time.

    Something (untested) like this:

    ... $R->set("mat[$_]", $mat[$_] ) for 0 .. $#mat;

    But you probably need to tell R that 'mat' is a matrix first by preceding the above with something like:

    mat=matrix(1:12,3,4)

    Or perhaps a data.frame with named columns would be a better choice. See the R docs.


    With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
    Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
    "Science is about questioning the status quo. Questioning authority".
    In the absence of evidence, opinion is indistinguishable from prejudice.

      I ended up splitting my data into individual vectors and then combining them in R. Yes, it'd be nice to load directly into a "data.frame" but it's not too much bother to do it on the R side.

      This whole thing was just because my data was so nicely packaged from the database (via fetchall_arrayref) and it seemed a shame to split it just to stitch it back together.

      Thanks. Good to see that it wasn't just some obvious thing I'd missed.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: perlquestion [id://1017656]
Approved by toolic
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others taking refuge in the Monastery: (4)
As of 2024-03-19 13:59 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found